0

Unity で 3D 重力シミュレーションを作成しています。衝突応答を除いて、すべてが正しく機能しています。現在のタイムステップの時間ではなく、衝突の正確なポイントから衝突解決の計算を行いたいです。周りを見回して、衝突の正確な時間を決定するための正しい方程式を見つけたと思います。ただし、コードを実行しようとすると、結果として NaN エラーが発生します。問題を解決するために考えられるすべてのことを試しましたが、エラーを解決するものは何もないようです。誰かが私のコードを見て、私が見逃した可能性のある明らかなエラーを特定できるかどうかを確認できますか?

私が問題を抱えている方法は、最後の時間ステップ内に衝突したことがわかっている 2 つの球の間の衝突の正確な時間を決定するように設計されています。各タイム ステップが 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