Unity Update 详解
在unity中常用到函数
物理运算应该放在FixedUpdate中
Input检测应该放在Update中
相机应该放在LateUpate中
首先来看一下官方的解释:
Update
Update is called every frame, if the MonoBehaviour is enabled.
Update is the most commonly used function to implement any kind of game script. Not every MonoBehaviour script needs Update.
上面重点说的是Update每帧都会被调用。
FixedUpdate
Frame-rate independent MonoBehaviour.FixedUpdate message for physics calculations.
首先FixedUpdate和帧率是不相关的。
而且在官方的解释中,FixedUpdate的更新频率不是按帧率,而是按一个叫做 fixed frame-rate frame,这里我们称其为物理帧。而其更新的默认频率是每秒50次,这个值可以通过项目设置来更改。
(官方给到建议:如果有用到Rigidbody,并且有施持续力的情况,就放在FixedUpdate里面。)
LateUpdate
LateUpdate is called every frame, if the Behaviour is enabled.
这里和Update函数的描述一致,都是每帧调用一次。
(官方给到建议:Camera最好放在这里,因为LateUpdate是在所有Update函数运行完以后才开始执行的。是所有updata)
在使用FixedUpdata时候,遇到过一个问题:FixedUpdate 函数中使用Input有可能调用不到。
当时为了解决这个问题在设置中更改了时间间隔(固定时间间隔更新,一般为0.02s更新一次,可以放与物理属性操作相关代码。也可以由用户更改时间间隔,Edit->Project Settings->Time 找到弹出面板的Fixed Timestep设置。)

但是更改FixedUpdata后会出现两种情况:
1.帧率较低,也就是Time.deltaTime比较大,那么此时执行一次Update函数就要执行很多次FixedUpdate函数。那么按下一次x就会执行很多次DoSth().
这里为什么是很多次,这是因为Input事件是获取事件而非检测事件,因为只有执行到SetInput,新的按键状态才会被更新。
2.帧率很高,也就是Time.deltaTime比较小。那么此时执行一次Update函数可能并未执行FixedUpdate函数。那么按键就不会被检测到。
我就是遇到了第二种情况,所以在使用input获取点击事件时,要使用updata。
感谢原作者详细解释:
原文链接:https://blog.csdn.net/lexnewgate/article/details/85015376