1. 程式人生 > >Update LateUpdae FixedUpdate

Update LateUpdae FixedUpdate

性能 rotation manual 固定 lin .cn 如果 root behavior

這個問題本來是在研究動畫系統時遇到的: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函數隊列中執行的順序。

Update LateUpdae FixedUpdate