首页 > 其他 > 详细

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

时间:2016-02-07 21:18:47      阅读:1598      评论:0      收藏:0      [点我收藏+]

最近把1年前的跑酷游戏demo拿出来重做了一遍,解决了2个之前的遗留bug。

虽然罪魁祸首都是FixedUpdate,但细节又不太一样。这里记录一下

 

1.点击空格键,角色会跳跃。但有一定概率角色会跳的很高,甚至跳出屏幕(使用Rigidbody.AddForce)

 

解决:

具体可以看我这篇对FixedUpdate的测试,http://www.cnblogs.com/hont/p/4792801.html

由于FixedUpdate存在一帧内调用多次的情况,刚体AddForce在一帧内调用了N次,导致主角弹跳力爆表。。

void Update()
{
    if (Input.GetKeyDown(jumpKey))
    {
        ExecuteJump();
    }
}

 

但是官方建议刚体在FixedUpdate中调用,而又存在一帧内调用多次的情况。可能直接改速率没有问题。

 

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
    }
}

 

可能Unity底层对于GetKeyDown,GetKeyUp之类的方法就是延时一帧去处理的,FixedUpdate存在每帧漏调用的的情况

后来我把帧数在后面打出来,像14帧FixedUpdate漏调用了。

技术分享

 

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

原文:http://www.cnblogs.com/hont/p/5184802.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!