等尺性衝突検出を処理するにはどうすればよいですか?


14

等尺性のランジャンプスタイルのプラットフォーマーを作成したいと思います。プレイヤーは、床の上のプラットフォームの上にジャンプしたり、オブジェクトの側面にぶつかったりできる必要があります。

2Dゲームエンジンを使用するので、使用していないディメンションの完全な3Dコリジョンをエミュレートしたくありません。

ゲーム内のオブジェクトは、X、Y、幅、高さ、および深さのZを使用して配置する必要があると考えています。

これらの値を使用して、衝突をどのように検出する必要がありますか?


これは一般的な種類の質問であることはわかっていますが、より詳細な回答または優れた学習リソースへのリンクが必要です。
jdeseno

回答:


19

2つのオプション:

  • 固定の正投影カメラを使用して、3Dゲームとして扱うことができます。次に、標準の3Dゲームリソース/ブック/チュートリアル/ライブラリを使用できます。スプライトを使用して2Dでレンダリングした場合でも、動きなどの数学はシーンの背後で3Dのままです。これにより、最も正確な結果が得られます。

  • 高さプロパティが追加されたトップダウンの2Dゲームとして扱うことができます。たとえば、各タイルに高さの値がある2Dグリッドを想像してください。あるタイルから別のタイルに移動する場合、キャラクターの足がそのタイルの高さ以上である場合にのみキャラクターを特定のタイルに通過させますが、ジャンプして重力がタイルの上に降ろす場合は、そのままにしておきます。もう少し作業すれば、橋の下などを歩くことができるようになります。


4

これを簡単にする方法はたくさんあります。たとえば、レイヤーを許可しなかった場合(たとえば、橋の上下を歩くことができる場合)、X / Y次元ですべての衝突検出を行うことができ、衝突セットをその高さ+深さのいずれかにフィルタリングできます以上。


2

ゲームが長方形のグリッドに基づいている場合、このグリッドはX / Y軸を定義します。Zは高さに使用できます。

衝突は、2Dタイルベースのゲームと同じくらい簡単です。

次に、レンダリングのためにグリッドから等角スクリーン座標に戻す必要があります。これはかなり簡単です-しかし、ソートの目的で(深さ)値を計算することを考える必要があるかもしれません(等尺性シーンを後ろから前にレンダリングする)


高さにZを使用することは本能に反しますが、トップダウンの2Dゲームでは正しいことです。サイドオンゲームとトップダウンゲームの間でコードを再利用できます。
イアン

2

グーグルでこのデモを見つけました:http : //planetskill.com/iso/

移動するWASD。ジャンプするスペースバー

上/下軸との衝突のみを実装しますが、他の衝突の追加は簡単です:

次のステップの上下位置が最大値よりも高い場合は、動かさないでください。これにより、ジャンプを簡単に実装することもできます。

サンプルコード:http : //gist.github.com/478997


2

上記のすべて。アイソメトリックはせん断された2Dグリッドであるため、2Dタイルマップとして扱い、深度をエンコードする方法を考えてください。通常の2Dゲーム(「ジャンプ」時にブロックの後ろまたは前に移動できるようにするにはどうしますか?タイルごとに深さを保存するか(深さバッファー-> zバッファー)、または複数のレイヤーを使用します)または、より洗練されたものが必要な場合は、タイルタイプ(またはマップ位置)ごとにコールバックを実装し、好きなことを実行したり、深度を確認したり、機器を確認したり、プレーヤーをワープさせたり、プレーヤーをゆっくり上に移動させたり、HDをフォーマットしたりできます。


良い答えカイ-これは問題の核心であり、私は誰もそれを育てなかったことに驚いています。これは、物理学に関して、アイソメについて初心者を混乱させるものです。
エンジニア

1

レベル上に表示されていない別のコリジョンレイヤーを作成し、それを使用してコリジョンをチェックすることもできます。プレーヤーがどのレイヤーにあるかがわかっている限り、これを複数のレイヤーに使用することもできます;)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.