如果大佬在阅读过程中发现本人有误或有更好用的方法,欢迎指正和教导,十分感谢
初学过程中,发现有一个常用的Time类成员变量Time.deltaTime,并且没找到相关的详细解释。只知道想要对某个对象进行一段时间内的操作,用这个变量会比较平滑。
该变量被经常用在Update方法中,Update方法是每帧调用的刷新函数。而每帧之间的间隔时间并不固定,Time.deltaTime其实就是当前帧与上一帧之间的时间间隔。
举例:
void Update() {
Debug.Log("Time.deltaTime = " + Time.deltaTime); // 打印输出每一帧的时间间隔。
this.transform.Translate(0, 0, 10 * Time.deltaTime); // 将对象沿Z轴方向每秒移动10个单位的距离。
}
这里因为Update是每帧执行,所以10*Time.deltaTime是计算出当前帧与上一帧之间的时间增量对应的距离。
上述代码打印结果:
Time.deltaTime = 0.02
Time.deltaTime = 0.1
Time.deltaTime = 0.02920806
Time.deltaTime = 0.06096995
Time.deltaTime = 0.01705098
Time.deltaTime = 0.01612198
Time.deltaTime = 0.01717496
Time.deltaTime = 0.02742994
Time.deltaTime = 0.01596308
原理:
以上结果可以看到每帧的间隔时间并不是均匀的,假设每秒有5帧,1s = 5f,若想让物体每秒移动10单位,也就是每5帧移动10单位。
这5帧对应的时间分别可以定义为t1、t2、t3、t4、t5。
转化为速度时间距离,问题就简单的多了。
速度已知是10,每帧的时间就是Time.deltaTime,所以,上述代码中的10 * Time.deltaTime实际上就是每帧的移动距离,因为时间不固定,所以每帧对应的平均距离也不固定,这样计算保证了物体移动过程中的速度是固定的。
相比每帧都移动固定的2,虽然同样能够实现每秒走10,但是使用Time.deltaTime能保证移动过程的平滑和顺畅,速度一致。