6

私は 3D タイル ベースのゲームに取り組んでおり、AABB 衝突検出を使用しています。プレイヤーが交差しているすべての立方体について、プレイヤーが立方体と最も交差していない軸を見つけ、その軸に沿って立方体からプレイヤーを押し出します。

キューブがチェックインされる順序によっては、複数のキューブの端に沿ってスライドするときに問題が発生する可能性があります。問題を説明する図を作成しました。

http://imgur.com/mmK0W.png

  • 矢印 #1 は、プレイヤーが試みた動きです。他の矢印は衝突応答です。
  • 左の図では、衝突は最初に右の立方体に対してテストされ、プレイヤーは左に押し出され、次に上に押し出されます。(悪い)
  • 右の図では、最初に左の立方体に対して衝突がテストされ、プレーヤーが押し上げられ、その時点でプレーヤーはもう一方の立方体と交差していません。(良い)

これを解決する最も効率的な方法についてのアイデアはありますか? または、衝突応答を処理するためのより良い方法はありますか?

ありがとうございました。

4

4 に答える 4

4

個別の実装では、必要な場合 (立方体/方向が重複する場合) にのみ、システムに連続的な計算を挿入する必要があります。

チェック時にユーザー キューブ ( uc ) が交差するキューブc1c2 ... ciごとに、どのキューブが最初に「触れられた」かを調べたいとします。実際には 1 つしかありません。ucの方向を考慮し、 ci内のucの量(オーバーラップ) をとって、 ciに「触れた」時点のcuの位置を見つけます。d

cjで最初に「触れた」立方体(軸上で最も多くのロールバックを必要とした立方体d- 時間が早い方) を特定し、この立方体のみを使用して衝突反応を計算します。

精度に到達するだけではありません。ただし、すべてのキューブが動いている場合、速度が異なる場合などに役立ちます...

于 2010-10-11T01:33:16.200 に答える
0

あなたの図から、プレーヤーとキューブの間の重なりを最小限に抑える最小の動きが必要なようです。重なりのある各キューブは、プレーヤーを直交する 2 つの方向に「押し」ようとします。各方向の最大プッシュの最小プッシュを選択するようなことはできますか?

于 2010-10-11T00:33:01.160 に答える
0

連続した 2 つ (またはそれ以上) の固定キューブを 1 つの大きな四角形に結合できる場合は、一種のハイブリッド ブロード フェーズを実装できます。最初に大きな四角形に対してテストします。緑色のチェック マークの結果が表示され、各キューブをチェックするよりも高速です。その後、必要な場合にのみ、個々のキューブをチェックします。

于 2010-10-11T01:43:15.790 に答える