最近把1年前的跑酷游戲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存在漏幀的情況,它是基於秒的。或者准確的說是基於物理步更新
放在物理步的函數中處理本身就是錯誤的做法