跑酷游戏的一些bug总结(滥用FixedUpdate的坑)
时间:2016-02-07 21:18:47
收藏:0
阅读:1598
最近把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漏调用了。

原文:http://www.cnblogs.com/hont/p/5184802.html
评论(0)