Version: 2019.1
ナビゲーションシステムの内部的なしくみ
NavMesh ビルドコンポーネント

ナビメッシュの作成

レベルのジオメトリ (地形) から NavMesh (ナビメッシュ) を作成することを NavMesh Baking と呼びます。このプロセスは、Navigation Static としてマークされているすべてのゲームオブジェクトのレンダーメッシュと Terrains (地形) を収集し、それらを処理して、レベルの歩行可能な表面にほぼ等しいナビゲーションメッシュを作成します。

Unityでは、NavMesh (ナビメッシュ) の生成は Navigation ウィンドウ (Window > AI > Navigation) で処理されます。

シーンに必要なナビメッシュの作成は、4つの簡単な手順で行えます。

  1. ナビゲーションに影響を与えるシーンジオメトリ (歩行可能サーフェスと障害物) を 選択 します。
  2. Navigation Static チェックボックスにチェックを入れ、選択されたオブジェクトがナビメッシュのベーキング処理に含まれるようにします。
  3. ベイクの設定をエージェントのサイズに合わせて調整します。
    • Agent Radius は、エージェントの中心が壁などにどの程度近づけるか設定します。
    • Agent Height は、空間内でエージェントの手がとどく高さ (低さ) です。
    • Max Slope は、エージェントが登れる斜面の角度です。
    • Step Height は、エージェントが踏むことができる障害物の高さです。
  4. Bake をクリックするとナビメッシュが作成されます。

生成されたナビメッシュは、シーン内では、Navigation ウィンドウが開いていて表示されている状態の時に、ステージのジオメトリ上を覆う青いオーバーレイとして表示されます。

上の図で気づくように、生成されたナビメッシュの歩行可能領域はやや小さめに表示されます。ナビメッシュは、エージェントの中心が移動できる領域を表します。概念的には、エージェントを縮小されたナビメッシュ上の点と見なすか、フルサイズのナビメッシュ上の円と見なすかは関係ありません。なぜなら、この 2 つは同じことだからです。しかし、点とみなす方がランタイムの効率が良く、デザイナーは半径を気にせずエージェントがすき間を通り抜けることができるかをすぐに知ることができます。

もうひとつ考慮に入れる必要があるのは、ナビメッシュはあくまでも歩行可能サーフェスを大まかに表したものであるということです。例えば階段は、ソースのサーフェスにはきちんと段があったとしてもナビメッシュでは平らな傾斜面で表されたりします。これはナビメッシュのサイズを抑えるための仕様です。この副作用としては、ジオメトリに狭い場所がある場合、エージェントが通り抜けられるようにするためにスペースを少し余分に設ける必要が生じることがあります。

ベーキングが完了すると、そのナビメッシュが属するシーンと同じ名前のフォルダー内にナビメッシュアセットファイルが作成されます。例えば、Assets フォルダー内にある First Level というシーンの場合、ナビメッシュの場所は Assets > First Level > NavMesh.asset になります。

ベイクするオブジェクトのその他の生成方法

Navigation ウィンドウ上でオブジェクトを 静的ゲームオブジェクト として作成する方法の他に、インスペクター上部の Static メニューも使用できます。Navigation ウィンドウが開かれていない時にはこれが便利です。

参考文献

ナビゲーションシステムの内部的なしくみ
NavMesh ビルドコンポーネント