近期将之前的跑酷遊戲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存在漏幀的情況,它是基于秒的。或者準确的說是基于實體步更新
放在實體步的函數中處理本身就是錯誤的做法