[Unity] 解決物件移動速度於 Recoder 輸出後明顯延遲

2020.05.06 / Unity
問題說明 這是一個很基礎的 FPS 控制問題,在 Unity 中,我們應該要用 FixedUpdate() 來實作角色移動功能,而不是 Update()。 為什麼這麼說呢?我們先來對照一下 FixedUpdate() 與 Update()

問題說明

這是一個很基礎的 FPS 控制問題,在 Unity 中,我們應該要用 FixedUpdate() 來實作角色移動功能,而不是 Update()。

為什麼這麼說呢?我們先來對照一下 FixedUpdate() 與 Update() 用 Unity Recoder 輸出後的結果:

https://www.youtube.com/watch?v=SpVDXldakKM

https://www.youtube.com/watch?v=xdRolNCgd8A

你可以明顯地觀察到 Update() 在 Unity Recoder 之中出現了嚴重滯後的情形,但是在 FixedUpdate() 中卻較為正常。主要是 Unity Recoder 在錄影中會拖累 FPS 更新,當你是使用不穩定的 Update() 的時候就容易出現超級緩慢、忽快忽慢的狀況。

而 FixedUpdate() 會嚴格遵守你規定的更新時間來執行 (預設為 0.02 秒),就不會被延遲影響。

解決辦法

修改控制角色移動與子彈的腳本,將有關於物理、移動的程式碼改到 FixedUpdate() 中,即可解決。

void FixedUpdate() // Update() -> FixedUpdate() { lifeText.text = life.ToString(); transform.position = path[index]; index++; if(index == path.Count){ GameObject.Find(“GM”).GetComponent().enemys.Remove(this.gameObject); Destroy(this.gameObject); } }

相關文章

Ted Liou

雲科碩士在讀中,專注於 Unity C#、TouchDesigner 技術,常把技術筆記分享到部落格,偶爾還直接挪用文章來當教材的研究生。

留言板

歡迎提問或分享觀點!