Skip to content

[Unity] LateUpdate()、FixedUpdate()、Update() 的差異

Last Updated on 2021-11-01 by Clay

在我最初使用 Unity 來建立一個 Android 手機遊戲時,我曾將建立好的關卡在電腦上試跑,並逐漸微調其中的細節直到我在測試環境上運行得非常順利為止。

然而,當我安裝到測試用的手機裝置(OPPO 手機)上進行測試時,發現整體遊戲都十分卡頓,玩起來體驗非常糟糕。

查詢了眾多資料,這才發現這是因為我電腦環境設置了 60 幀(一秒刷新 60 個畫面),然而手機的硬體限制只有 30 幀。

而我的遊戲物件的參數,比方說遊戲物件的位置,是放在 Update() 當中偵測按鈕並做出位置的改動的。而 Update() 便是在 Awake()Start() 執行後,每一幀都執行一次的函示。

仔細想想就會發現,這造成了我的電腦環境執行速度是手機環境的兩倍,難怪遊戲物件的動作非常順暢,因為電腦遊戲物件的位置移動速度也是手機遊戲物件的兩倍。


FixedUpdate()

Update() 依照一幀來執行一次不同,FixedUpdate() 是固定隔一段時間執行一次的。這樣的好處是什麼呢?按照剛才舉的遊戲物件位置改動,不論是電腦環境還是手機環境,不同幀數刷新的遊戲可以擁有一樣的位置改動速度。

若是想要修改 FxiedUpdate() 的執行時間間隔,可以從 Edit > Settings > Time > Fixed Timestep 去做更改。

數字越小,則 FixedUpdate() 呼叫速度就越快。


LateUpdate()

最後來介紹一下 LateUpdate()。跟 Update() 相同,會在每一幀執行一次,不同之處在於它會等待所有 Update()不同物件的 Update())都執行完畢後才會執行。

所以可以用來進行畫面的更新、或紀錄所有遊戲物件更新完後的狀態之類的任務。


總結

更新函示效果
Update()每一幀執行一次。
LateUpdate()每一幀執行一次,但會在所有 Update() 執行完後才執行
FixedUpdate()不受幀數限制,每隔固定時間執行一次

References


Read More

Tags:

1 thought on “[Unity] LateUpdate()、FixedUpdate()、Update() 的差異”

  1. Pingback: 【Unity】Update、FixedUpdate、LateUpdate 的差異 – 蛇尾巴

Leave a Reply