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
- https://stackoverflow.com/questions/34447682/what-is-the-difference-between-update-fixedupdate-in-unity
- https://docs.unity3d.com/ScriptReference/MonoBehaviour.FixedUpdate.html
- https://docs.unity3d.com/ScriptReference/MonoBehaviour.LateUpdate.html
Pingback: 【Unity】Update、FixedUpdate、LateUpdate 的差異 – 蛇尾巴