Unity3D中的Update, FixedUpdate, LateUpdate的區別


MonoBehaviour.Update 更新
  當MonoBehaviour啟用時,其Update在每一幀被調用。

MonoBehaviour.FixedUpdate 固定更新
  當MonoBehaviour啟用時,其 FixedUpdate在每一幀被調用。
  處理Rigidbody時,需要用FixedUpdate代替Update。

  例如:給剛體加一個作用力時,你必須應用作用力在FixedUpdate里的固定幀,而不是Update中的幀。(兩者幀長不同)

MonoBehaviour.LateUpdate 晚於更新

  當Behaviour啟用時,其LateUpdate在每一幀被調用。
  LateUpdate是在所有Update函數調用后被調用。這可用於調整腳本執行順序。

  例如:當物體在Update里移動時,跟隨物體的相機可以在LateUpdate里實現。

 

Update和FixedUpdate的區別:
  Update跟當前平台的幀數有關,而FixedUpdate是真實時間,所以處理物理邏輯的時候要把代碼放在FixedUpdate而不是Update.
  Update是在每次渲染新的一幀的時候才會調用,也就是說,這個函數的更新頻率和設備的性能有關以及被渲染的物體(可以認為是三角形的數量)。在性能好的機器上可能fps 30,差的可能小些。這會導致同一個游戲在不同的機器上效果不一致,有的快有的慢。因為Update的執行間隔不一樣了。
  而FixedUpdate,是在固定的時間間隔執行,不受游戲幀率的影響。有點像Tick。所以處理Rigidbody的時候最好用FixedUpdate。
  PS:FixedUpdate的時間間隔可以在項目設置中更改,Edit->ProjectSetting->time 找到Fixedtimestep。就可以修改了。


Update和LateUpdate的區別
  在聖典里LateUpdate被解釋成一句話:LateUpdate是在所有Update函數調用后被調用。這可用於調整腳本執行順序。

  例如:當物體在Update里移動時,跟隨物體的相機可以在LateUpdate里實現。這句我看了雲里霧里的,后來看了別人的解釋才明白過來。
  LateUpdate是晚於所有Update執行的。例如:游戲中有2個腳步,腳步1含有Update和LateUpdate,腳步2含有Update,那么當游戲執行時,每一幀都是把2個腳步中的Update執行完后才執行LateUpdate 。雖然是在同一幀中執行的,但是Update會先執行,LateUpdate會晚執行。
  現在假設有2個不同的腳本同時在Update中控制一個物體,那么當其中一個腳本改變物體方位、旋轉或者其他參數時,另一個腳步也在改變這些東西,那么這個物體的方位、旋轉就會出現一定的反復。如果還有個物體在Update中跟隨這個物體移動、旋轉的話,那跟隨的物體就會出現抖動。 如果是在LateUpdate中跟隨的話就會只跟隨所有Update執行完后的最后位置、旋轉,這樣就防止了抖動。
  做一個相機跟隨主角的功能時,相機的位置調整寫在LateUpdate(),老是不明白,看官方的SmoothFollow相機跟隨寫在Update()中

原文地址:

http://bbs.9ria.com/thread-417976-1-1.html

http://www.cnblogs.com/zhaoqingqing/p/3454091.html

http://www.cnblogs.com/zhaoqingqing/p/3296086.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM