Roll A Ball
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的更多相关文章
- 学习unity的第一个小游戏(Roll the ball)的笔记
1.摄像机的跟随运动,逻辑就是保持摄像机跟主角的距离不变(Undate()函数). offset=trandform.position-player.position. Undate() { tran ...
- 关于Roll A Ball实例练习记录
学习中不段进步! 游戏思路:通过键盘控制白色小球,让它"捡起"柠黄色方块,捡起一个加1分,全部捡起游戏胜利! 游戏对象: Ground:绿色地面 player: 小球 Obsta ...
- Roll a ball 学习
using UnityEngine; using System.Collections; /// <summary> /// 相机控制 /// </summary> publi ...
- 1.1.0 Unity零基础入门2——Roll a Ball
1. 游戏界面 2.代码 //FoodRotate - - 控制cube旋转 using System.Collections; using System.Collections.Generic; u ...
- Siki_Unity_1-2_Unity5.2入门课程_进入Unity开发的奇幻世界_Roll A Ball
1-2 Unity5.2入门课程 进入Unity开发的奇幻世界 任务1:Roll A Ball项目简介 Unity官网的tutorial入门项目 方向键控制小球在平台上滚动,碰撞方块得分,消掉所有方块 ...
- URAL 1775 B - Space Bowling 计算几何
B - Space BowlingTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/ ...
- egret贝塞尔曲线运动
class MtwGame { public constructor() { } private static _instance: MtwGame; public static get Instan ...
- HDU 4602 Magic Ball Game(离线处理,树状数组,dfs)
Magic Ball Game Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) ...
- 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 ...
随机推荐
- Cloudera Manager 5和CDH5离线安装
CDH (Cloudera’s Distribution, including Apache Hadoop),是Hadoop众多分支中的一种,由Cloudera维护,基于稳定版本的Apache Had ...
- Linux下memcached安装和启动方法
Linux下memcached安装和启动方法 1. 首先下载memcached 和 libevent 包. Memcached用到了libevent这个库用于Socket的处理.下面是下载的两个包文件 ...
- flume-ng配置文档简单说明
1.配置文件现状 1.1 Flume数据接收端 IP地址:54.0.95.67 功能:接收各个端口发来的数据. 启动方式:进入目录 /usr/local/flume/*bin 在终端运行 ./rece ...
- [LintCode] Identical Binary Tree 相同二叉树
Check if two binary trees are identical. Identical means the two binary trees have the same structur ...
- [CareerCup] 15.1 Renting Apartment 租房
Write a SQL query to get a list of tenants who are renting more than one apartment. -- TABLE Apartme ...
- Odoo Website 替换 谷歌地图为 百度地图
由于众所周知的原因,国内使用谷歌地图是件非常痛苦的事,更为接地气的做法是替换为百度地图. 模块地址参见群公告. 演示地址:http://timesup.cn:8069
- JS分页方法
/** maxpage 最大页数 */function gotoPage(maxpage){ var gotoPage = document.getElementById(" ...
- apache中.htaccess不起作用
找到apache的配置文件httpd.conf文件,找到: 代码如下 复制代码 #LoadModule rewrite_module modules/mod_rewrite.so 去掉前面的#号. ...
- 8点需要注意的Web编程小细节
- HDU 2546
饭卡 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...