一般的にマップ上の移動可能なエリアは単独メッシュに限定されません。設計するうえで,フロア全体が連続でも,あえて複数のセクションに分割するほうが簡単です。さらにプレイ エリアの二点間を歩行させつつ “限定ポイント” を通過させたい場合があります(例.狭い橋で川を渡らせる)。Unity では二つのナビメッシュをつなげる Off-mesh Link を用意しています。
オフメッシュ リンク には端の地点が二つあり,メッシュを各々につなげます。エージェントが二つのナビメッシュを渡るとき二つのうち最も近いリンクへ向かいます。次にリンクを横切って,もう一方のメッシュへ渡ります。その後は通常どおりに目的地点へ向かいます。デフォルトではオフメッシュ リンクは自動的に横切りますが,スクリプトの中でエージェントがリンクへ到達したときに渡ることを止める選択肢も持たせられます。施錠されたドアの正しい鍵を所持している場合のみに通過させる場合などに便利です。
リンクはメッシュをベイクする時も簡単に追加できます。それには Navigation ウィンドウの Object タブから必要な全てのナビメッシュ オブジェクトで Off Mesh Link Generation を選択します:
Baking タブに切り替えると Generated Off Mesh Links セクションがあります。_Drop Height_ と Jump Distance プロパティは二つのメッシュをつなげられる最大の落差と幅を示します。Bake をクリックするとシーンビューで全てのメッシュでの Drop Height と Jump Distance は黒い線で示す弧で接続されます。これがメッシュ間のリンクです。これで片方のメッシュのナビメッシュ エージェントから,利用可能なリンクを通って,もう一方のメッシュの目的地点へと到達できます。
リンクに制限を追加して一方通行に出来ます。_Off Mesh Link Generation_ (Navigation ウィンドウの Object パネル)でメッシュ A はセットしてメッシュ B はセットしない場合,リンクは A から B へ移動できますが,B から A は移動できません。例えば崖から落ちることは出来ても登ることは出来ない場面で役立ちます。
二つのメッシュが重なる部分のすべてでつなげたい場合があります。良くあるケースは二つのメッシュが階段や穴があるフロアです。ゲームでの制約上リンクを配置したい場面もあります。例えば二つのプレイ エリアを通路や橋でつなげる場合です。広大なマップでの経路探索のパフォーマンスを向上させるためにナビメッシュをつなげる箇所を限定する場合もあります。これらを自動的なリンク生成で適切に配置するのは難しいですが, Off Mesh Link コンポーネント により手動でメッシュの調整ができます。
オフメッシュ リンク コンポーネントは任意のオブジェクトに追加できます (メニュー:
)。詳細はコンポーネント リファレンスに記載されてますが,主なプロパティは Start と End です。これらでリンクの開始と終了の位置をトランスフォームのオブジェクトで指定しますが,このオブジェクトの一つにオフメッシュ リンク コンポーネントを追加すると便利です。正しく動作させるためには,これらマーカーとなるオブジェクトのアンカー地点はナビメッシュの表面近くに配置する必要があります。端の地点を正しく配置できると,Navigation ウィンドウが表示されている状態では常にシーンビュー上でリンクの線が表示されます。