发现问题
在使用Unity的物理碰撞时,会用到该方法:
void OnCollisionEnter2D(Collision2D coll){
//代码
}
在该代码加入:
Time.timeScale = 0.001f;
会发现在高速碰撞的时候,虽然执行了方法,但是有可能碰撞的两个物理之间有一段距离,如果这个时候需要严格的位置数据,显然是不靠谱的。
关于FixedUpdate
为什么会有距离?两个球的画面是怎么出来的?
查看OnCollisionEnter2D方法在生命周期中的情况。
可以看到,OnCollisionEnter2D确实是由Unity的物理引擎计算出来的并且执行的。
两个有距离的球怎么会有碰撞?难道是物理引擎的BUG?
后来通过stackoverflow了解到,FixedUpdate的执行时间是可配置的,距离的产生主要是FixedUpdate的执行频率较小。
通过Time.fixedDeltaTime可进行配置,默认是0.02,也就是说每秒50次物理运算。
我将其调整到Time.fixedDeltaTime = 0.015f来保证每秒有60次物理运算,BUG随即消失。
但是物理计算需要耗费CPU,注意别挑得太高。