私はタワー ディフェンス ゲームを設計しており、そのために A* パスファインディング アルゴリズムを使用して、スポーン エリアから目的地に到達しています。
ここでの問題は、すべてのユニットが積み重なり、見た目がよくないことです。代わりに何らかの方法でそれらをグループ化し、十分なスペースがない場合はさらに広げる方法はありますか?
このアルゴリズムは、すべてのユニットが一度に 1 つのタイルを移動するように機能します。
私はタワー ディフェンス ゲームを設計しており、そのために A* パスファインディング アルゴリズムを使用して、スポーン エリアから目的地に到達しています。
ここでの問題は、すべてのユニットが積み重なり、見た目がよくないことです。代わりに何らかの方法でそれらをグループ化し、十分なスペースがない場合はさらに広げる方法はありますか?
このアルゴリズムは、すべてのユニットが一度に 1 つのタイルを移動するように機能します。
おそらく聞いたことがある有名な一人称シューティングゲームの AI 設計を行っていた私の友人は、彼らのパスファインディングアルゴリズムがどのように偽の動作を生成したかについて話しています。限られたスペースにいる敵のグループに手榴弾を投げると、それらはすべて互いにぶつかり合い、単一の出口への効率的な経路をたどろうとします. それは愚かに見え、幻想を壊しました。
より優れた経路探索で貴重なプロセッサ サイクルを燃やすのではなく、敵のグループが逃げているときに、敵が別の敵に 2 回連続してぶつかった場合、敵は逃げるのをやめ、代わりにアヒルをするというヒューリスティックを追加しました。その結果、通常は手榴弾で殺されます。プレイヤーにとって非常に満足のいくものであり、よりリアルに見えます。
おそらく、ここでできることと同様のことがあるでしょう。あまりにも多くのユニットが同じ経路に向かって衝突し、それが非現実的に見える場合、状況を検出してアニメーションを変更するための安価で簡単な方法はありますか?
群れの動作を使用して、同じ一般的なパスをたどるようにすることができますが、互いに積み重なることはありません。ここにMSによって提供されるXNAの例があります:http: //xbox.create.msdn.com/en-US/education/catalog/sample/flocking
すべてのタイムステップで最短経路を再計算していますか?
はいの場合:タイルの上に立つことができるユニットの最大数をタイルに与えるだけです。満杯の場合、このタイルを占有できるユニットはこれ以上ありません。
いいえの場合:各ユニットのパスを次々に計算します。このタイルがどれだけ占有されているかを他のユニット(後で来る)に伝えるベクトルをすべてのタイルに与えます。この情報をA*アルゴリズムに入れます。注:この方法では、アルゴリズムが大幅に遅くなります。
すべてのステップで最短経路を再計算することをお勧めします。
編集1 実際には、アルゴリズムの複雑さはどちらの場合も同じですが、ケース1の方がはるかに簡単に実装できるように思えます。
多くのクリーパーが占めるタイルにペナルティを追加すると、移動する余地がある限り、おそらくタイルの間隔が空けられます。
しかし、それはもはや最速の道である必要はありません。それはまたそれらをより予測不可能にする可能性があり、それはあなたのターゲットの難易度に応じて良いか悪いかもしれません:)
反復経路探索はどうですか?
このアルゴリズムは、有用なものに完全に合体するためにいじる必要があります。ただし、事前に計画されたパスを使用するという利点があるため、逆方向にループやクリープが発生することはありません。また、タイミングなどを無視できるため、概念的に簡単です。しかし、おそらく効率も悪いでしょう。