Unity高速碰撞下位置偏移的处理

发现问题

在使用Unity的物理碰撞时,会用到该方法:

void OnCollisionEnter2D(Collision2D coll){

//代码

}

在该代码加入:

Time.timeScale = 0.001f;

会发现在高速碰撞的时候,虽然执行了方法,但是有可能碰撞的两个物理之间有一段距离,如果这个时候需要严格的位置数据,显然是不靠谱的。

关于FixedUpdate

为什么会有距离?两个球的画面是怎么出来的?

查看OnCollisionEnter2D方法在生命周期中的情况。


Unity高速碰撞下位置偏移的处理_第1张图片

可以看到,OnCollisionEnter2D确实是由Unity的物理引擎计算出来的并且执行的。

两个有距离的球怎么会有碰撞?难道是物理引擎的BUG?

后来通过stackoverflow了解到,FixedUpdate的执行时间是可配置的,距离的产生主要是FixedUpdate的执行频率较小。

通过Time.fixedDeltaTime可进行配置,默认是0.02,也就是说每秒50次物理运算。

我将其调整到Time.fixedDeltaTime = 0.015f来保证每秒有60次物理运算,BUG随即消失。

但是物理计算需要耗费CPU,注意别挑得太高。

你可能感兴趣的:(Unity高速碰撞下位置偏移的处理)