一、Debug.Log()
用于向Console(控制台)窗口输出一串信息。
例如:
在Start函数中加入:Debug.Log("组件执行开始函数");
在Update函数中加入:Debug.Log("当前游戏进行时间:"+Time.time);
运行游戏,选择主菜单的Window->General->Connsole,Console窗口中会产生大量信息
罚下开始函数值执行了一次,后民的都是Update函数调用时输出的,会发现时间的流逝不太稳定,特别是在游戏启动的时候偏差较大。
Debug.Log()函数是写代码、查bug的好帮手,要熟练掌握
二、修改物体的位置
在Unity中修改物体的位置,就是修改Transform(变换)组件的数据。在Inspector窗口可以查看和修改Transform组件的Position、Rotation、Scale参数,在脚本里也可以
有两种常用方法:
使用Translate()函数
//物体将沿着自身右侧方向(X正方向也称为右)前进1.5个单位
transform.Translate(1.5f,0,0);
直接指定新的位置
tranform.position=new Vector3(1,2.5f,3);
这里可能有两个让人觉得奇怪的地方:2.5携程2.5f,设置位置时用new Vector3(x,y,z)这种写法
主要是因为C#的规定。直接写2.5会被认为是一个double数据,而这里需要float类型数据,所以要加上f。而写new的原因是Vector3是一个值类型,position是一个属性,由于引用和值的原理,这里不能用"transform.position.y=2.5f"
一般在Update函数中修改物体的位置来实现运动,这两种方法都可以。不过由于系统繁忙时无法保证稳定的帧率,如果按照上述写法,帧率就与速度成正比了。但按照游戏开发的常规方法,应当选择"每秒移动相同的距离"。例如:60帧时,每帧移动0.1米;那么30帧时,每帧就应该移动0.2米。只用将上述代码稍稍修改就可以实现了
transform.Translate(1.5f*Time.deltaTime,0,0);
Time.deltaTime表示两帧之间的间隔,用它乘以速度就可以抵消帧率变化的影响。由于它比较小,因此速度的数值应适当放大一些
三、读取和处理输入
Unity支持多种多样的输入设备,如键盘、鼠标、手柄、触摸屏等。以下代码就可以获取用户当前的纵轴输入和横轴输入
voidUpdate(){
float v=Input.GetAxis("Vertical");//垂直方向
float h=Inpu.GetAxis("Horizontal");//水平方向
Input.GetAsix()函数的返回只是一个float类型的值,(取值范围为-1~1).Unity用这种方法将各种不同的输入方法统一在了一起
通过简单的乘法就可以将输入的幅度与物体运动的速度联系起来
transform.Translate(h*10*Time.deltaTime,0,v*10*Time.deltaTime);
四、实例:实现一个移动小球
- 新建一个球体
- 调整摄像机位置
- 为球体创建脚本Ball并挂载,代码如下
using UnityeEngine; public class Ball:MonoBehaviour{ public float speed=10; //public字段可以在inspector界面中显示,并修改其值 void Start(){ } void Update(){ float v=Input.GetAxis("Vertical"); float h=Input.GetAxis("Herizontal"); transform.Translate(h*speed*Time.deltaTime,0,v*speed*Time.deltaTime); } }