GameObject的添加就不细说了,地面,小球和碰撞小物体。

刚体组件(Rigidbody):

使物体能够模拟物理效果,比如重力,碰撞,推力等;

控制小球移动的脚本(Script,Ball的脚本):

  Input.GetAxis("Horizontal"):控制横向运动键,有A,D键;

  Input.GetAxis("Vertical"):控制纵向运动键,有W,S;

  AddForce(Vector3):添加力,力是矢量,有方向;

控制相机跟随物体移动(第一视角):

  把相加直接拖到物体上,作为物体的子对象,但是这里行不通,因为小球是圆球,移动起来是旋转的,相机也会随着选装,导致物体在整个画面中一直在颠倒旋转。另一种方法是相机和物体的位移保持不变,也就是相机的中心和小球的中心始终保持着一定的距离,该距离用向量表示。

  通过Transform.position得到各个物体的位置,是个点坐标。定义一个公共变量,为主角Ball的Transform对象。通过小球的位置,和两者位置的偏移量获得相机的位置。

由于场地周围没有任何阻碍,小球会离开地面,然后受重力作用往下落。所以在场地周围增加墙,来限制小球的运动范围

创建小球要收集的食物(Foods):

  创建一个cube,调整角度,然后将其制成prefab,为了方便之后对所有食物的统一修改。多个食物的创建,目前是利用prefab重复拖动到Scene中,或者在在Scene中使用快捷键ctrl+D来创建(这里暂时不描述怎么动态随机创建物体,只是初级简单的创建)。prefab的好处是方便修改所有利用prefab创建的物体的属性的修改。控制食物动态旋转,利用transform.Rotate(new Vector3(0, 1, 0))。由于食物较多,所以创建一个空的GameObject,统一管理这些物体。食物的Box Collider组件中如果不勾选Is Trigger属性,小球,无法穿过食物,勾选后可以穿透食物。

检测是否发生碰撞:

  1.碰撞检测;2.触发检测;3.射线检测;

  碰撞首先物体得依赖于刚体

  1.OnCollisionEnter(Collision col);

  2.OnTriggerEnter(Collider col);

  顺便一提Resharper插件,以后介绍

分数显示和结束画面:

  这里UI使用的是UGUI,在Hierarchy面板中右键创建UI中的Text,然后设置Text位于UI的Canvas的位置:

  

  而使这些字在结束时显示,则使用SetActive(true)。

源代码:

 using UnityEngine;
using System.Collections;
using UnityEngine.UI; public class BallControl : MonoBehaviour {
public int force = ;
private Rigidbody rd; private int score = ; public Text text;
public GameObject winText;
// Use this for initialization
void Start () {
rd = gameObject.GetComponent<Rigidbody>();
} // Update is called once per frame
void Update () {
float h = Input.GetAxis("Horizontal");
float v = Input.GetAxis("Vertical");
print(h + "");
print(v + "");
rd.AddForce(new Vector3(h, , v) * force);
} void OnCollisionEnter(Collision col)
{
if (col.collider.tag == "Food")
{
Destroy(col.collider.gameObject);
}
} void OnTriggerEnter(Collider col)
{
if (col.tag == "Food")
{
score++;
text.text = score.ToString();
if (score == )
{
winText.SetActive(true);
}
Destroy(col.gameObject);
}
}
}
using UnityEngine;
using System.Collections; public class FoodsControl : MonoBehaviour { // Use this for initialization
void Start () { } // Update is called once per frame
void Update () {
transform.Rotate(new Vector3(, , ));
}
}
 using UnityEngine;
using System.Collections; public class FollowTarget : MonoBehaviour { public Transform playerTransform;//声明对象的位置
private Vector3 offset;//位置偏移量 // Use this for initialization
void Start () {
offset = this.transform.position - playerTransform.position;
} // Update is called once per frame
void Update () {
//根据小球的位置和偏移量得到相机的位置
transform.position = playerTransform.position + offset;
}
}

 

Roll A Ball的更多相关文章

  1. 学习unity的第一个小游戏(Roll the ball)的笔记

    1.摄像机的跟随运动,逻辑就是保持摄像机跟主角的距离不变(Undate()函数). offset=trandform.position-player.position. Undate() { tran ...

  2. 关于Roll A Ball实例练习记录

    学习中不段进步! 游戏思路:通过键盘控制白色小球,让它"捡起"柠黄色方块,捡起一个加1分,全部捡起游戏胜利! 游戏对象: Ground:绿色地面 player:  小球 Obsta ...

  3. Roll a ball 学习

    using UnityEngine; using System.Collections; /// <summary> /// 相机控制 /// </summary> publi ...

  4. 1.1.0 Unity零基础入门2——Roll a Ball

    1. 游戏界面 2.代码 //FoodRotate - - 控制cube旋转 using System.Collections; using System.Collections.Generic; u ...

  5. Siki_Unity_1-2_Unity5.2入门课程_进入Unity开发的奇幻世界_Roll A Ball

    1-2 Unity5.2入门课程 进入Unity开发的奇幻世界 任务1:Roll A Ball项目简介 Unity官网的tutorial入门项目 方向键控制小球在平台上滚动,碰撞方块得分,消掉所有方块 ...

  6. URAL 1775 B - Space Bowling 计算几何

    B - Space BowlingTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/ ...

  7. egret贝塞尔曲线运动

    class MtwGame { public constructor() { } private static _instance: MtwGame; public static get Instan ...

  8. HDU 4602 Magic Ball Game(离线处理,树状数组,dfs)

    Magic Ball Game Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...

  9. 2013 多校联合 F Magic Ball Game (hdu 4605)

    http://acm.hdu.edu.cn/showproblem.php?pid=4605 Magic Ball Game Time Limit: 10000/5000 MS (Java/Other ...

随机推荐

  1. 地理数据库的类型geodatabase类型

    地理数据库的类型geodatabase类型 地理数据库是用于保存数据集集合的“容器”.有以下三种类型: 文件地理数据库 - 在文件系统中以文件夹形式存储.每个数据集都以文件形式保存,该文件大小最多可扩 ...

  2. php by oneself

    在php里面写html代码真的很麻烦,最近学到了一个新的方法: <html> <head> <title>PHP</title> <meta ht ...

  3. HTML第一节课

    html的基本结构<html> <head> <title> 页面标题 </title> </head> <boby> 页面内容 ...

  4. 从show slave status 中判断mysql同步状态

    slave status 中检查同步状态: 1.sql线程和io线程显示yes Slave_IO_Running: Yes Slave_SQL_Running: Yes 2. Master_Log_F ...

  5. sbt Getting org.scala-sbt sbt 0.13.12 ...

    本地仓库被我搞乱了,一气之下整个删掉了本地仓库,再重启sbt卡在Getting这一步. Getting org.scala-sbt sbt 0.13.12 ... 卡住 补充sbt配置文件: 文件结构 ...

  6. Python之路(二)

    (1)python的内置函数(BIF) python3中内置了70多个BIF,常用的几个有: list():创建一个新的空列表. range():输入次数参数,返回一个迭代固定次数的迭代器. enum ...

  7. 安装redis时遇到zmalloc.h:50:31: 致命错误:jemalloc/jemalloc.h:没有那个文件或目录

    参考博文,http://www.phperz.com/article/14/1219/42002.html 解决办法 make MALLOC=libc

  8. sqlmap用户手册详解(转)

    http://url/sqlmap/mysql/get_int.php?id=1 当给sqlmap这么一个url的时候,它会: 1.判断可注入的参数 2.判断可以用那种SQL注入技术来注入 3.识别出 ...

  9. SQL 语句调用这个存储过程,生成顺序编码

    一直很讨厌存储过程,没想到今天帮了我大忙啊,或许会因为今天让我慢慢喜欢上存储过程吧,不多说了,切入正题 在使用数据库的时候,难免要在使用过程中进行删除的操作,如果是使用int类型的字段,令其自增长,这 ...

  10. Cannot create a server using the selected type.

    1.退出 eclipse 2.到[工程目录下]/.metadata/.plugins/org.eclipse.core.runtime 3.把org.eclipse.wst.server.core.p ...