【Unity3D 教程系列第 2 篇】Update,LateUpdate,FixedUpdate 的區別

語言: CN / TW / HK

我正在參加「掘金·啟航計劃」

這是【Unity3D 教程系列第 2 篇】,如果覺得有用的話,歡迎關注專欄。

在指令碼的整個生命週期中,Unity 主要提供了 3 種更新方法

  1. Update():每一幀執行時,都會立即呼叫此方法。
  2. LateUpdate():LateUpdate 是在所有 Update 方法呼叫之後被呼叫(語出聖典)。
  3. FixedUpdate():固定更新。預設情況下,系統每 0.02 秒呼叫一次。 具體的間隔時間可以在 TimeManager 中配置(詳見文末)。

區別

總體來說,Update() 和 LateUpdate() 屬於立即更新,更新之間的頻率是不固定的,比如某一幀有一個耗時操作時,就會影響到下一幀更新時間,所以對更新頻率要求比較穩定的物理系統(如Rididbody)就不太適合在這裡處理更新。

FixedUpdate() 雖然是固定更新,但是其實也是相對固定的,比如某一幀耗了好幾秒,它依然會卡住。不過正常的程式會優化耗時操作,小範圍的幀率波動是正常的,可以讓它更新的時間間隔稍微長一點,這樣它的更新是比較平滑的。

在實際的開發中,例如以秒為單位的倒計時,並不需要每一幀去判斷時間,所以用 FixedUpdate 就再合適不過了。

拓展:TimeManager(時間管理類)

在導航選單欄中選擇 Edtior→Project Settings→Time 選單項,如下圖所示

在這裡插入圖片描述

術語解釋:

Fixed Timestep:固定時間步長。功能:獨立於幀速率的時間間隔,用來命令何時執行物理計算和FixedUpdate() 事件。

Maximum Allowed Timestep:允許的最大時間步長。功能:獨立於幀速率的時間間隔,當幀速率低時,它會覆蓋最壞的案例場景,執行物理計算和(FixedUpdate()) 事件的時間不會超過規定的時間。

Time Scale:時間尺度 ,控制遊戲的速度,0在遊戲中代表暫停,1表示正常執行,2表示時間加倍;

你的問題得到解決了嗎?歡迎在評論區留言。

贈人玫瑰,手有餘香,如果覺得文章不錯,希望可以給個一鍵三連,感謝。


結束語

技術是一點一點積累的,大神也不是一天就可以達到的。原地不動就是退步,所以每天進步一點點。

最後,附上一句格言:"好學若飢,謙卑若愚",望共勉。