在Unity中记录时间需要用到Time类。
Time类中比较重要的变量为deltaTime(只读)
deltaTime:指完成最后一帧所花费的时间(从最后一帧到当前帧的间隔(以秒为单位)),也即是增量时间
使用:如果想均匀地旋转一个物体,在不考虑帧速率的情况下,可以乘以Time.deltaTime。
//旋转
void Update () {
this.transform.Rotate(10 * Time.deltaTime, 0, 0);
}
//移动
void Update () {
this.transform.Translate(0, 0, 10 * Time.deltaTime);//每秒移动10米
}
如果想每秒增加或者减少一个值,需要乘以Time.deltaTime,同时也要明确在游戏中是需要每秒1个单位还是每帧1个单位的效果。如果是乘以Time.deltaTime,那么游戏对象就会按固定的节奏而不是依赖游戏的帧速率,因此,游戏对象的运动变得更容易控制。
为什么要用Time.deltaTime?
Update()每一秒更新的帧数是不一样的,增量时间是实时变动的,而每一帧都是变动的。增量时间保证了无论帧率是多少,都可以让物体移动定值。
1秒30帧,那么帧量时间就是1/30秒
1秒180帧,那么帧量时间就是1/180秒
总的来说,使用Time.deltaTime可以让物体移动或者旋转指定定值。比如,每秒移动N米
例如
public GameObject gameObject;
void Update () {
Vector3 te = gameObject.transform.position;//获取游戏对象的位置坐标
te.y += 5 * Time.deltaTime;//沿y轴每秒上升5个单位
gameObject.transform.position = te;//设置游戏对象的位置坐标
//这个方法其实和MovePOSiton方法相视
}
如果涉及刚体,可以写在FixedUpdate方法中。在FixedUpdate方法中,如果想每秒增加或者减少一个值,需要乘以Time.fixedDeltaTime。
例如
public GameObject gameObject;
void FixedUpdate()
{
Vector3 te = gameObject.GetComponent<Rigidbody>().transform.position;
te.y += 5 * Time.fixedDeltaTime;
gameObject.GetComponent<Rigidbody>().transform.position = te;
}