経路探索システムではゲーム マップ上でキャラクターが移動できる範囲を表現する方法と,二点間を移動できる経路から最適経路を判断する方法が必要です。両方の問題に対する解決策がメッシュ(3D グラフィックスで使用されるものに相当)です。移動できる範囲はメッシュのポリゴンにより定義され,メッシュを通過できる経路は隣接するポリゴン間の移動に適切に分割できます。理論上はフロアのグラフィックスに使用されるメッシュをナビゲーションにも使用できます。実践的にはグラフィカルなメッシュは詳細すぎて非効率でありナビゲーション向きではありません。こういった理由などから AI システムはフロアメッシュに対してよりシンプルで透明な Navigation Mesh (略してナビメッシュ) を提供します。幸いにグラフィカルなフロアメッシュといくつかの数値パラメータから効果的なナビメッシュを生成するテクニックがあります。ナビメッシュを計算から生成するこのような手法は Baking といいます。
Unity ではナビメッシュ生成は Navigation ウィンドウ で行ないます (メニューから:
)。ウィンドウの Object タブを選択すると,次のように表示されます:-Scene Filter オプションにより,シーンビューおよび階層パネルで表示されるオブジェクト選択を制限します。他のオプションは選択されたシーンオブジェクトに適用されます。大まかにいうと,ナビメッシュの移動可能なエリアでオブジェクトを含めたり外したりできます。ナビメッシュに含めるオブジェクトを Navigation Static に設定すべきです。エリアを移動可能とする場合は Navigation Layer を Default に設定して,そうでない場合は Not Walkable に設定すべきです。一般的には移動可能なエリアはゲームの中のフロアや傾斜面,橋に相当し,移動可能でないエリアは壁や通過できない障害物に相当します。
Bake ボタンによりナビメッシュを生成するための追加オプションを別パネルに表示します:
特に注意が必要なのは General 設定です。_Radius_ によりキャラクターが壁までどれぐらい近づけるか決定し,結果的にはキャラクターがどれぐらい狭い幅までは,壁の間を通過できるかを表します。 Height によりナビメッシュの表面から天井までの高さを表し,キャラクターの背の高さによっては通過できないことを示します。 Max Slope パラメータにより傾斜面を壁としてみなさない限界の勾配を表し, Step Height はフロア面の凹凸のうち無視できる最大の高さを示します(この値より大きい場合は,移動可能なエリアが分断されます)。
これらのパラメータを設定して, Bake ボタンをクリックするとナビメッシュが算出されます。一般的にベイクは短時間で終わり,出力結果のナビメッシュはシーン上でレベルに重ねられたオブジェクトとして表示されます。シーン上で何回か調整することで希望どおりのナビメッシュにしく場合があります。