如何解決物件移動速度在 Unity Recoder 輸出後明顯延遲的狀況?

問題說明

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

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

你可以明顯地觀察到 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<GM>().enemys.Remove(this.gameObject);
        Destroy(this.gameObject);
    }
}
訂閱
Notify of
guest
0 留言
Inline Feedbacks
檢視所有留言