衝突を増やすことなく衝突オブジェクトを分離する方法


11

すべてのオブジェクトを移動して衝突をチェックする単純な離散衝突検出システムを使用するとします。衝突するオブジェクトを(もちろん)分離し、適切な応答速度(バウンス、スライド、停止など)を割り当てます。

衝突するオブジェクトのペアがある場合、片方または両方のオブジェクトが他のオブジェクトと衝突することにならないように、オブジェクトを分離するにはどうすればよいですか?

回答:


8

これは一般に解決するのは簡単な問題ではありません。物理エンジンでは、制約ソルバーによって処理されます。制約ソルバーにはさまざまなタイプがありますが、最も理解しやすいのはシーケンシャルインパルスソルバーです。

Erin Cattoが、以前のいくつかのGDCでシーケンシャルインパルスソルバーについて説明しました。Box2Dダウンロードページからダウンロードできます。たとえば、GDC 2009の1つを参照してください


これについて知りたいです。衝突の検出と解決の必要性がどれほど一般的であるかを考えると、アーケードゲームとアクションゲームに適した単純化された解決アルゴリズムが少なくともあると私は想定しました。
AJM 2010年

2
あんまり。昔(SNESなど)、ゲームデザインの変更や妥協により、このような問題が発生していました。例えば。スーパーマリオでは、プレーヤーがヒットすると、マリオは2秒間衝突を回避するために数秒間無敵になります。ダブルドラゴンでは、後方への落下のアニメーションが終了するまで、プレーヤーの衝突は無視されます。
yaustar '29年

@yaustar実はマリオは敵と全く衝突していません。ヒットボックスが重なるとダメージを受けるだけです。

3

これを防ぐ唯一の方法は、そもそも侵入を防ぐことです。オブジェクトを移動する前に、それが正当な移動であることを確認してください。これは、2つのオブジェクトが相互に移動するのを防ぐために、一度に1つずつオブジェクトを移動する必要があることに注意してください。

ペネトレーションが発生しない場合は、ポジションをリセットする必要がないため、セカンダリペネトレーションはトリガーされません。


2

私が通常行うことは次のとおりです。

オブジェクトを分離して衝突が増えると、ステップの最大量に到達するか、オブジェクトが事前定義されたしきい値未満に侵入するまで、もう一度繰り返すだけです。


それは非常に不安定です。ゲームのFPSは、プレイヤーが軽いオブジェクトを押して混乱させたときにいつでも急上昇する可能性があります。次のフレームでそれを解決する方が良いでしょう。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.