跑酷游戏的一些bug总结(滥用FixedUpdate的坑)


最近把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存在漏帧的情况,它是基于秒的。或者准确的说是基于物理步更新

放在物理步的函数中处理本身就是错误的做法

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM