回答:
これは非常に単純化されたバージョンですが、ほとんどのアーケードタイプのゲームには適しています。次のプロパティが必要です。
positionX, positionY - where the car is
velocityX, velocityY - speed on each axis
drag - how fast the car slows down
angle - the rotation of the car, in radians
angularVelocity - speed the car is spinning, in radians
angularDrag - how fast the car stops spinning
power - how fast car can accelerate
turnSpeed - how fast to turn
すべてのフレーム:
positionX += velocityX
positionY += velocityY
velocityX *= drag
velocityY *= drag
angle += angularVelocity
angularVelocity *= angularDrag
加速する
velocityX += sin(angle) * power;
velocityY += cos(angle) * power;
左に操縦する
angularVelocity -= turnSpeed;
右に操縦する
angularVelocity += turnSpeed;
良好なドリフトを得るには、dragとangleDragを1に非常に近い値、たとえば0.9に設定します
私は今日、衝突とスピンアウト中の車両のダイナミクスをシミュレートする論文を読んでいました。
これには、意図的な衝突力によって引き起こされるヨーイング中の横転モーメントと後部タイヤのトラクションの損失を表す物理モデルが含まれています。衝突中のビークルダイナミクスに興味のあるゲームプログラマーにとっては興味深いようです。
最初に理解する必要があるのは、「スリップ率」と「トラクションサークル」です。スリップ率は、タイヤの挙動の良い近似であり、角度差とタイヤの横方向の力との間に非線形の関係があります。また、ドライバートルクフィードバック情報も提供します(フォースフィードバックステアリングホイール用)。
両方の概念の超単純バージョンは次のとおりです。ローリング方向と移動方向の角度差が大きいほど、ローリング方向に垂直な力(横方向の力)が大きくなります。(通常)5°から8°でピークに達し、タイヤの角度が大きくなるとそこから落ちます。
トラクションサークルは、基本的に、外側に向かう力ベクトルを切り取るリミッターです。それは、重い加速/制動が操縦能力を低下させる方法をモデル化します。牽引円のサイズ(最大牽引力ベクトル)は、タイヤを地面に押し付ける力に比例します。
駆動/制動(回転)トルクと地面からの反対方向の牽引力とは別に、横方向(ステアリング)の力をモデル化する必要があります。