Update LateUpdae FixedUpdate
这个问题本来是在研究动画系统时遇到的:OnAnimatorMove在Animator.Update()调用,那这个Animator.Update是什么时候调用的呢。
Animator Component
Manual:
Controller:如果不赋值就不会有性能消耗,所以如果是动态赋值,初始时就留空吧
Avatar:如果是类人模型,就必须赋值。这里不得不提暗黑,它并不使用类人选项,但却大量使用类人的功能,比如赋值Avatar,动画重定向等。
Apply Root Motion:Should we control the character’s position and rotation from the animation itself or from script.
Update Mode:影响Animator的更新时机(Monobehavior的Update[逻辑更新]或FixedUpdate[物理更新,当动画影响物理世界时使用])和更新的TimeScale。
Culling Mode:一直更新动作 or render不可见时不更新动作,只有root motion更新动作。
所以Animator.Update的调用时机是可设置的,默认是Monobehavior的Update调用。
在此过程查文档也得到了Update LateUpdae FixedUpdate的调用时序:
Update:每一帧被调用,调用频率跟当前帧率有关
FixedUpdate:固定帧被调用,Edit->ProjectSetting->time 找到Fixedtimestep里设置固定帧间隔。处理物理逻辑的代码一般放这里,比如控制一个Rigibody,因为物理世界不应该被帧率影响。(事实上,并不是固定帧被调用,如果帧率非常低,比如Update()执行间隔比FixedUpdate()长,那期间后者会等前者执行后,把期间“累积”的FixedUpdate一次性执行完,这里有人做过测试:http://www.cnblogs.com/softcat/p/6136290.html)
LateUpdate:LateUpdate是在所有Update函数调用后被调用。这就可以让开发者控制执行顺序了,一个应用是,许多脚本的Update影响主角位置,所以把摄像机跟随主角实现在LateUpdate()中,避免了摄像机抖动,毕竟你不能保证Update相机位置朝向的脚本,的Update函数,在所有脚本的Update函数队列中执行的顺序。