deltatime 是Time类下一个重要的静态变量,他表示的是上一帧所用的时间,在脚本中我们会经常用到它,假设我们此处有一个脚本文件
//此处新建一个含有Transfrom组件的对象
public Transform tmpObj;
void Update () {
tmpObj.transform.Translate(Vector3.back*5*Time.deltaTime);
}
假设我们在场景中新建了一个Cube物体,并绑定到此脚本的tmpObj对象上
那么 tmpObj.transform.Translate(Vector3.back*5*Time.deltaTime); 表示的就是向后移动该Cube物体
Vector3.back的值是0.0, 0.0, -1.0...即表示Z轴方向指向屏幕外
5*deltaTime表示的是什么呢?
他表示的是每秒的变化量为5...此处也就是沿Z轴方向每秒后退5个单位...
为什么说它是每秒的变化,那么此处要结合Update()方法一起看
假设我们现在有两台机器稍微好点,一台普通的
前者每秒渲染25帧,即帧频是 25帧/s,那么其deltaTime理论近似为1/25s,为什么说近似,因为有的帧快有的帧慢
后者帧频是 20帧/s,那么其deltaTime理论近似为1/20s
那么1秒的时间
稍好点的机器移动的距离 25 * 1/25 * 5 = 5
稍普通的机器移动的距离 20 * 1/25 * 5 = 5
发现虽然机器的不同但最后的结果都是移动了相同的距离,避免了不同机器下的到不同的效果
当然这里我们的结论并不严谨,因为我为了大家好理解将deltaTime取了近似值1/25
那么假设
前者第一帧和第二帧渲染的都很快都是1/50s,中间22帧都是1/25s,最后一帧较慢用了2/25s
后者第一帧和第二帧渲染的都很快都是1/40s,中间17帧都是1/20s,最后一帧较慢用了2/20s
乍一看感觉最后逐个乘加的到的结果还有相同的5
但是再看了看deltaTime的定义突然发现问题来了,若帧是如此的话,那么第一帧的deltaTime到底是多少?
还有最后一帧到底到底有没有执行,理论上肯定会执行,但若执行岂不是多出一帧?
还是说从第2帧开始执行并把第二帧当第1帧?
亦或是Unity中是固定帧,每一帧的时间是相同的?
希望有人看到了能有人帮我解答这个问题...