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

ナビメッシュの作成

ステージのジオメトリ(地形)からナビメッシュを作成することを NavMesh Baking と呼びます。静的ゲームオブジェクト として登録されたすべての Game Object の Render Mesh と Terrain を集めて処理し、それを基にステージの歩行可能サーフェス(面)を大まかに表したナビゲーションメッシュが作成されます。

Unity では、ナビメッシュの生成は Navigation ウィンドウ(menu: Window > Navigation )から行います。

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

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

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

上の画像を確認すると、ナビメッシュでは歩行可能な領域が縮小されれているように見えるかもしれません。ナビメッシュは、エージェントの中心が進行できる領域を示すものです。概念上は、「点」として表されたエージェントが領域を縮小したナビメッシュ上を移動しても、「円」として表されたエージェントがフルサイズのナビメッシュ上を移動しても、実際は同じことなのでどちらでもよいのです。しかし「点」で表すほうがランタイムにおける効率が良く、またデザイナーにとっても、地形の狭い隙間をエージェントが通り抜けられるかどうか、半径を考慮することなくすぐに分かるので都合がよいことから、このような仕様になっています。

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

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

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

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

参考文献

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