我正在Unity中创建3D重力模拟。除碰撞响应外,我的一切工作正常。我想从确切的撞击点而不是当前时间步的时间进行碰撞解决计算。我环顾四周,我想我找到了正确的公式来确定碰撞的确切时间。但是,每当我尝试执行代码时,我都会收到NaN错误。我已经尝试了所有我能想到的解决问题的方法,但似乎没有什么可以解决这个错误。有人可以查看我的代码,看看你是否可以发现我可能错过的任何明显错误?
我遇到问题的方法是为了确定两个球体之间的确切冲击时间,我知道这两个球体在最后一个时间步长内发生碰撞。如果每个时间步长为1,则该方法意味着返回发生碰撞的0(当前时间步长)和1(前一个时间步长)之间的数字。
This is the formula I am using
Vector3 velocity2MinusVelocity1 = particle2.GetComponent<Particle>().Velocity - particle1.GetComponent<Particle>().Velocity;
Vector3 separationVector = particle1.transform.position - particle2.transform.position;
return ((-(Vector3.Dot(separationVector, velocity2MinusVelocity1)
/ (Mathf.Pow(Vector3.Magnitude(velocity2MinusVelocity1), 2))))
-
(Mathf.Sqrt(
Mathf.Pow(
Vector3.Dot(separationVector, velocity2MinusVelocity1)
/ Mathf.Pow(Vector3.Magnitude(velocity2MinusVelocity1), 2)
, 2)
-
Mathf.Pow(Vector3.Magnitude(separationVector), 2)
- Mathf.Pow(particle1.GetComponent<Particle>().Radius
+ particle2.GetComponent<Particle>().Radius
,2)
/ Mathf.Pow(Vector3.Magnitude(velocity2MinusVelocity1), 2)
)));
如果结构有点难以理解,我道歉。我试图让它尽可能容易阅读