読者です 読者をやめる 読者になる 読者になる

テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

【Unity】Navmeshで離れた空間にテレポートする

3D Unity Navmesh

f:id:tsubaki_t1:20161025222749g:plain

今回はNavmeshでキャラクターを移動させる際、本来であればNavmesh的につながってない場所を移動させる方法についてです。

 

入り口と出口が直接つながっていないケース

今回は要するに入り口と出口が直接繋がっていないケースとなります。ドラゴンは上の小屋から入り、(多分、丘の中の洞窟を超え)下の小屋から出てきます。

f:id:tsubaki_t1:20161025224117j:plain

 

この二つは見て分かる通り、明確につながっていません。また、できれば上の小屋に入った瞬間に下の小屋に出てきて欲しいです。

 

この二つの空間を繋ぐ為、Offmesh Linkを設定します。これで二つの空間にトンネルが生成され、Navmeshで移動してる場合は、上の小屋から下の小屋へ移動する事が出来るようになります。

f:id:tsubaki_t1:20161025224327j:plain

 

ただし、ここで一つ問題があります。というのも、Offmesh Link上での移動速度は変更することが出来ず、移動のパスが見えてしまう点です。

少し分かりやすい所にOffmesh Linkを置くと、まるわかりです。

f:id:tsubaki_t1:20161025224900g:plain

 

Offmesh Linkの移動を即座に完了させる

Offmesh Linkの移動を即座に完了させる際には、NavMeshAgent.CompleteOffMeshLinkを使います。これでOffmesh Link上にNavmeshAgentが乗ってる場合、即座に移動を完了させてくれます。

if (agent.isOnOffMeshLink){
      agent.CompleteOffMeshLink ();
}

f:id:tsubaki_t1:20161025225440g:plain

 

Warpで高速で移動しても良いといえば良いのですが、移動後にOffmeshLinkを一時的に無効にする的な面倒くさい処理があるので、余り良くないです。

 

最後に、ワープする箇所に不自然の無いように、視界から消えるような位置…例えば洞窟の入り口や建物の影に設定すれば、それなりに自然に見えます。

 

これも同じ技術です。

 

 関連

tsubakit1.hateblo.jp

tsubakit1.hateblo.jp

tsubakit1.hateblo.jp