はじめに
Navmeshの使い方もままならないのに、A* Pathfindingに手を出してしまって、Sample的な使い方をしているのでそのメモ。
10,000円以上払ったのだから是非とも自分のものにしないと!
A* Pathfinding Project Pro
以下は今回作ったものです。 適当にTerrainを用意して、カプセルをPlayerに、スフィアを目的地としています。
パターン1 直線距離で移動できる
パターン2 直線距離を崖で塞ぐ
うむ、まだNavmeshとの機能差異はさっぱわからない(;・∀・)
とりあえず、ここまでやった内容をメモがてらに記載します。
(Terrainとカプセル、スフィアを作るところは流石に割愛)
まず、A*をSceneに配置する為に空のGameObjectを置きます。 このObjectに「Pathfinder」をアタッチします。 (Pathfinderでアタッチしたのに、ComponentがAster Path(Script)となっているのは気にしない)
そうすると、↓のようなComponentがアタッチされます。
GraphsがNavmeshっぽい所を意味しているっぽく、とりあえず意味も分からず「Grid Graph」を選択します。 すると追加されるので、Grid Graphの中身を見てみます。
上記のWidthとDepthはAの適用範囲を指しており、1010で指定すると以下のように見えます (後述しますが、nodeのサイズを10*10で敷き詰めています)
今回のTerrainを100100に設定しているので、Aもそれに合わせておきます。
次にnodeですが、これを細かく設定するときめ細やかにA*が設定され、小道などの小回りが聞くようになりますが高負荷っぽいです。 以下は、0.1で設定した際のキャプチャ 今度は2で設定した際のキャプチャ
Max Climbは登ることが出来る高さを設定しているっぽく、ここを大きく設定すると、頑張って崖を登るようになりました。
後はまだ良くわかってないので割愛(;・∀・)
このタイミングで、Scanを押してみると、設定したA*がどのように貼られるのかが見ることが出来ます。
次にカプセルにNavmeshで言うところのagent設定を行います。
まず、SeekerのComponentをアタッチします。
次に、カプセルにagent設定を行います。 今回はサンプルとして、「SampleAI.cs」を作って最低限必要な処理を書きます。
using System.Collections; using System.Collections.Generic; using UnityEngine; [RequireComponent(typeof(Seeker))] public class SampleAI : AIPath { void Start () { base.Start(); } void Update () { } }
(ほんとうに基礎の基礎ですな…
[RequireComponent(typeof(Seeker))]
を宣言することで、HierarchyでA* agentのパラメータが設定出来るようになります。
ここのTargetにゴールとなるGameObjectを設定し、Speedとかをちょいちょいといじります。
void Start() { base.Start(); }
上記で経路探索して、移動を開始します。
途中で経路を再計算したい際は
base.Update();
で行けるっぽい。
ここまで設定することで、以下のように簡単に経路探索が出来るようになりました。
まだまだ初歩の初歩なのでNavmeshのほうが遥かに使えそうに見えますが…もうちょい勉強を重ねます。。。