天天看點

跑酷遊戲的一些bug總結(濫用FixedUpdate的坑)

近期将之前的跑酷遊戲demo拿出來重新做了一遍,解決了之前2個遺留bug。

雖然罪魁禍首都是FixedUpdate,但細節又不太一樣。這裡記錄一下

1.點選空格鍵,角色會跳躍。而有時會跳的比之前高很多(使用Rigidbody.AddForce)

解決:

AddForce之前應該清一下速率,因為是射線檢測是否碰到地面,而跳躍後不會立刻離地。

如果不清,後面幾幀會累加AddForce

清除速率保證離地的一瞬間肯定是正常Force,而非累加Force

2.有時候接收不到鍵盤按下的事件

這個比較奇葩,原因是輸入檢測寫在FixedUpdate裡:

void FixedUpdate()
{
    if (Input.GetKeyDown(jumpKey))
    {
        //Magic Bug
    }
}      

但用GetKey,檢測是否處于長按狀态又正常

void FixedUpdate()
{
    if (Input.GetKey(jumpKey))
    {
        //Great
    }
}      

當然,最終解決方法是放到Update裡去處理,漏檢率0。

void Update()
{
    if (Input.GetKeyDown(jumpKey))
    {
        //Great
    }
}      

因為FixedUpdate存在漏幀的情況,它是基于秒的。或者準确的說是基于實體步更新

放在實體步的函數中處理本身就是錯誤的做法