Warcraft 3のようなゲームで障害物をパスファインディング


10

タイルベースのマップでのA *検索を検討してください。単純明快なコードは次のようになります。そのセル内にユニットがある場合、そのユニットに到達できなくても問題ありません。

しかし、マップの解像度の問題があります。Warcraft 3を見ると、モンスターと構造には異なる半径があり、非常に近くを歩くことができます。これは、ベクターベースに似ていますが、これはどのように実装されましたか?

また、Warcraft 3のように、移動障害物衝突検出を経路探索アルゴリズムに組み込むための標準ソリューションは何ですか?


「ベクターベース」とはどういう意味ですか?
jcora

回答:


7

WC3開発者がどのようなアプローチを使用していたかははっきりとは言えませんが、階層的注釈付きA *に非常によく似ています。WC3Editorで定義された単位半径は3Dモデルのスケーリングにそのまま使用されましたが、パスファインディングの実際の単位サイズは離散的で、おそらくunitSize =(int)(unitRadius / 10)のようなものです。それはベクトルベースではなかった、それは確かだ。

高解像度のノードグリッドを作成するパスノードがたくさんあるとしましょう。グールのような単純なユニットのサイズは2であるため、グリッド内のどこかに配置するには、互いに近くに4つのフリーパスノードが必要です。デスナイトヒーローはわずかに大きく、サイズは3で、合計9つのパスノードを取ります。ここで、2つのノード幅のスペースを残して2つのジグラットを一緒に配置し、反対側にグールとデスナイトを送ります。グールは2つのジグラットの間を通過できますが、死の騎士は動き回らなければなりません。どのように決定できますか?

ノードが特定のサイズのユニットに対応できるかどうかを確認するために、最大許容ユニットサイズを定義する各ノードに特別なクリアランス値を割り当てましょう。基本的に、これはノードに対していくつかの境界チェックが行われ、可能な最大の境界がノードのクリアランスとして記憶されていたことを意味します。したがって、あるノードにデスナイトを配置したい場合、ノードのクリアランスとデスナイトのサイズを比較するだけで簡単になります。もちろん、ノードをめぐって競合する複数のユニットがあると、状況はさらに複雑になりますが、それは別の話です。

詳細については、この記事をご覧ください。

http://harablog.wordpress.com/2009/01/29/clearance-based-pathfinding/


4

テッセレーションを使用して、パスリージョン、つまりナビゲーションメッシュを作成します。この記事では、完全な図で概念を説明します。

パスファインディングアプローチとしてA *を維持することはできますが、ネットワークはグリッド(4接続グラフ)ではなく、ポリゴン領域間の任意の接続を表すグラフになります。したがって、アルゴリズムを適合させる必要があります。

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