UnityA* ナビゲーション アルゴリズム、理解しやすい

まず、A* 経路探索アルゴリズムは 2D アルゴリズムと 3D アルゴリズムに分かれており、現時点では NAVMesh アルゴリズムほど効率的ではありません。ただし、NAVMesh は 2D には適していないため、2D はやはり A* アルゴリズムによって実現する必要があります。

では、2D がどのように実現されるかについて話しましょう。

まず、2DA* アルゴリズムはまずマップをグリッド ブロックに分割し、それらを 2 次元配列にマークします。

各グリッドは、x、y (位置)、ID 番号、および重み値に基づいて int[][][][] の配列を形成し、各グリッドの位置を決定します

次に、A* 経路探索が A から B まで実行されたとします。

まず点A付近の4点または8点を選択します(赤が4点、4点を基に追加された青点が8点の位置)

(今回は8点を選択して説明します。オブジェクトの横の防御線のみ移動を許可する場合は4点しか選択できません。)

次に、これら 8 つの点を順番に保存し、これら 8 つの点のどれが点 B に最も近いかを確認し、この点を選択します。

次に、このポイントから 8 つのポイントを選択し、8 つのポイントの中にポイント b が表示されるまで、ナビゲーションが完了したことを示します。

これが彼の基本的なアルゴリズム原理です

障害物に遭遇した場合はどうすればよいですか?

上記の論理によれば、彼はこうなるはずです

上の赤​​い点を取って死ぬ

この時点でA○は行けないと判断したのでこの時間に戻ります

障害物に遭遇したらここには行けない、方向を変えなければならないという意味です

体重のことだよ

このとき、今度は歩いているときに障害物に遭遇し、最小の重さ1を歩いたところで歩けなくなってしまったことが分かりました。

そのため、壁にぶつかったときに書き込まれた座標の重みを記録し、通れないという事態を防ぐ必要があるが、このとき道を見つけるために2を選択し、順番に下を探索する。

これでナビゲーションは完了ですが、複雑な迷路ナビゲーションに遭遇した場合には、膨大な計算オーバーヘッドが発生する可能性があるため、注意してください。

そのため、オープンワールドマップでは「4点ナビゲーション」が一般的ですが、スペースが狭いので状況に応じて後日更新します。

おすすめ

転載: blog.csdn.net/qq_46043095/article/details/131183314