1. Calculate the radius of the turn.
2. Calculate acceleration and add to velocity.
3. Use velocity magnitude to determine distance travelled in one update.
ここまでは順調ですね。
4. Use arctan( distanceTraveled / turnRadius ) to get the angle of rotation.
持続する。まず、これはステップ 2 と競合します。加速を使用してターンを生成しているか、円のジオメトリを使用してターンを強制しています。これらを混ぜようとすると、せいぜいドリフトが発生します。第 2 に、ここでは arctan を使用しないでください。単に angle=(distanceTraveled/radius) です。
5. Update vehicle angle.
方位と姿勢を別々に追跡していますか? つまり、車の横滑りをシミュレートできますか? それとも、車が進行方向を向いていると思いますか? 後者の場合、同じ情報の冗長コピーを保持しているため、バグが発生します。
6. Rotate velocity by vehicle angle. e.g. velocity *= Quaternion.AngleAxis(angle, Vector3.up).
ステップ 2 を正しく実行した場合、これはステップ 2 でカバーされているはずです。
7. Update vehicle position with velocity
合理的に聞こえます。