前言
- 在写有关控制物体运动的脚本中经常会遇到这么一句话
Time.deltaTime*speed*dir
- 我一直不太理解为什么要乘以Time.deltaTime,今天看了一篇博客,基本弄懂了
- 和update以及FixUpdate有关
我的理解
在update里面
- 假如你要让物体每秒运动1单位,那么在Update里面,每一帧的时间都是不固定的,但是1s 假设这里有60帧【这个渲染的帧数会随着机器的性能而受到影响】
- 假如第一帧时间 f1 = 0.1
- 第二帧 f2 = 0.2
- 第三帧 f3 = 0.3 …
- 那么
dir*Time.deltaTime*speed = dir*(f1+f2+f3.....) *speed= dir*1*speed = dir*speed
- 刚好运动dir*speed个距离
在FixUpdate里面
- 这个函数是物理更新,也就是固定的时间间隔更新一次
- 在这个函数中调用就可以直接用
dir*speed
- 调整调用的时间间隔 edit -project settings - Fixed Timestep
两者区别
- update跟当前平台的帧数有关,而FixedUpdate是真实时间,所以处理物理逻辑的时候要把代码放在FixedUpdate而不是Update。
- update函数的更新频率和设备的性能以及被渲染的物体有关,结果就导致更新频率不一样,会出现卡顿