0

我正在 Unity 中创建 3D 重力模拟。除了碰撞响应外,我的一切工作正常。我想从确切的影响点而不是当前时间步的时间进行碰撞解决计算。我环顾四周,我想我找到了正确的方程式来确定碰撞的确切时间。但是,每当我尝试执行代码时,都会收到 NaN 错误。我已经尝试了我能想到的一切来解决这个问题,但似乎没有任何东西可以纠正这个错误。有人可以看看我的代码,看看你是否能找出我可能遗漏的任何明显错误?

我遇到问题的方法旨在确定我知道在最后一个时间步内发生碰撞的两个球体之间的确切撞击时间。如果每个时间步为 1,则该方法旨在返回一个介于 0(当前时间步)和 1(前一个时间步)之间的数字,表明发生了碰撞。

这是我正在使用的公式

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)
                )));

如果结构有点难以理解,我深表歉意。我试图让它尽可能容易阅读

4

0 回答 0