最近把1年前的跑酷游戏demo拿出来重做了一遍,解决了2个之前的遗留bug。
虽然罪魁祸首都是FixedUpdate,但细节又不太一样。这里记录一下
解决:
具体可以看我这篇对FixedUpdate的测试,http://www.cnblogs.com/hont/p/4792801.html
由于FixedUpdate存在一帧内调用多次的情况,刚体AddForce在一帧内调用了N次,导致主角弹跳力爆表。。
void Update() { if (Input.GetKeyDown(jumpKey)) { ExecuteJump(); } }
但是官方建议刚体在FixedUpdate中调用,而又存在一帧内调用多次的情况。可能直接改速率没有问题。
解决:
这个比较奇葩,原因是输入检测写在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