Unityのナビゲーション機能を使って決まった場所を巡回させる

記事内に広告が含まれています。

今回はUnityのナビゲーション機能を使って、決まった場所を巡回するキャラクターを作成します。

ナビゲーション機能を使って目的地を指定すればNavMeshした場所を自動でルートを決めて移動してくれました。

ナビゲーション機能については

敵キャラをUnityのナビゲーション機能を使って移動させる
Unityのナビゲーション機能を使って敵キャラクターを移動させます。ナビゲーション機能はあらかじめBakeされたフィールドを移動出来る機能です。

の記事でやっていますのでそちらを参考にしてください。

しかし、例えば城で見回りをするキャラクターを作りたい場合は目的地についたら次の目的地に向かって移動してほしいと思います。

そういう時は自動で移動場所を指定しないで、決められた場所をあらかじめ設定しておき、
それらの場所を順々に移動するようにします。

今回の機能を搭載すると、

↑のような感じで敵が巡回をします。

主人公が敵の検知エリアに入った時は追いかけられますが、検知エリアを出た時はまた巡回に戻るようになります。

ナビゲーションの機能をつけてあればそれほど難しい処理は必要ありません。

スポンサーリンク

キャラクターを巡回させる

ここまでわたくしの記事をご覧頂いた方はSetPositionスクリプトで目的地を設定していましたのでそこで巡回地点を周るようにしていきます。

Unity5.5バージョン?以降で、C#でスクリプトを組んでいる場合は

using UnityEngine.AI;

というusingディレクティブを入れておくといいです。

まず巡回する地点をTransformの配列にインスペクタで指定出来るようにします。

現在の巡回地点はnowPatrolPositionの番号で保持します。

今まではCreateRandomPositionメソッドを呼び出して、スタート地点にランダムな位置を足して目的地を作成していましたが、

SetNextPositionメソッドを使ってpatrolPositionsの地点を順々に周るようにします。

敵をプレハブにしてインスタンス化する場合はインスペクタでpatrolPositionsを設定出来ない為、OnEnableメソッドで巡回する地点の親のゲームオブジェクトを取得し、巡回地点を設定することにします。

敵の操作スクリプトで目的地を設定している箇所をCreateRandomPositionからSetNextPositionに変更します。

敵の巡回地点を作成する

次にpatrolPositionsに設定する巡回地点を作成していきます。

空のゲームオブジェクトを作成し、名前をZombiePatrolPositionsとします。

ZombiePatrolPositionsの子要素に空のゲームオブジェクトを作成し、巡回地点を作りそれぞれ移動させます。

ゾンビの巡回地点を作成する

↑のように4地点を巡回させるようにします(上ではZonbieとなってますがZombieが正解です)。

実際の巡回地点は

ゾンビの巡回地点の画像

↑のような位置にしました。

敵のSetPositionスクリプトのpatrolPositionsに今作成した巡回地点を設定します。

敵のSetPositionスクリプトにゾンビの巡回地点を設定

これで機能が完成しました。

終わりに

敵キャラの検知エリアに主人公が入った時に追いかける処理は、

Unityで主人公キャラが近づいてきたら追いかける敵キャラを作る
Unityで主人公キャラクターが敵キャラクターに近づいたら敵が主人公に近づいてくるようにしたいと思います。

の記事でやっていますが、両方を搭載すると巡回中の敵が主人公に気付くと主人公を追いかけ始めますが、見失った時は巡回に戻るようにする事が出来ます。

これで、ナビゲーション機能の移動を使って、決まった場所を巡回する機能の作成が出来ました。

タイトルとURLをコピーしました