【Unity】Navmeshで離れた空間にテレポートする
今回はNavmeshでキャラクターを移動させる際、本来であればNavmesh的につながってない場所を移動させる方法についてです。
入り口と出口が直接つながっていないケース
今回は要するに入り口と出口が直接繋がっていないケースとなります。ドラゴンは上の小屋から入り、(多分、丘の中の洞窟を超え)下の小屋から出てきます。
この二つは見て分かる通り、明確につながっていません。また、できれば上の小屋に入った瞬間に下の小屋に出てきて欲しいです。
離れた空間を繋ぐoffmesh link
この二つの空間を繋ぐ為、Offmesh Linkを設定します。これで二つの空間にトンネルが生成され、Navmeshで移動してる場合は、上の小屋から下の小屋へ移動する事が出来るようになります。
ただし、ここで一つ問題があります。というのも、Offmesh Link上での移動速度は変更することが出来ず、移動のパスが見えてしまう点です。
少し分かりやすい所にOffmesh Linkを置くと、まるわかりです。
Offmesh Linkの移動を即座に完了させる
Offmesh Linkの移動を即座に完了させる際には、NavMeshAgent.CompleteOffMeshLinkを使います。これでOffmesh Link上にNavmeshAgentが乗ってる場合、即座に移動を完了させてくれます。
if (agent.isOnOffMeshLink){
agent.CompleteOffMeshLink ();
}
Warpで高速で移動しても良いといえば良いのですが、移動後にOffmeshLinkを一時的に無効にする的な面倒くさい処理があるので、余り良くないです。
最後に、ワープする箇所に不自然の無いように、視界から消えるような位置…例えば洞窟の入り口や建物の影に設定すれば、それなりに自然に見えます。
これも同じ技術です。
Navmeshで、別空間に通じてる穴を通る奴 pic.twitter.com/whTruMBLXS
— 椿 (@tsubaki_t1) 2016年10月23日