NavMeshを使って敵にプレイヤーを追跡させる【Unity】

今回は、目的地までの経路探索が出来るNavMeshを使って、プレイヤーを追跡させてみます。

過去の記事で、敵(スライム)のrotationとpositionを変えるスクリプトにてプレイヤーを追いかけるようにしていましたが、追跡途中に障害物などが出てくると厄介です。

このような状況の時は、NavMeshの機能を使った方がスムーズに移動出来るのでおすすめです。

スポンサーリンク

NavMeshを使って敵にプレイヤーを追跡させる【Unity】

ナビメッシュでは、予め敵の大きさなどを決めておき、敵が動ける範囲をベイクします。

実際に追跡させる敵を動かすには、Navmesh Agentを使います。このコンポーネントに目的地を指定することで、ベイクした範囲を通って目的地を目指すようになります。

途中に何かしらの障害物がある場合は、ベイクによって通れない場所として計算されているので、障害物を避けて移動するようになります。

敵と障害物オブジェクトを配置する

追いかけてくる敵と障害物を準備しましょう。私は敵オブジェクトとして「Level 1Monster Pack」にある「Ghost_Lv1」を使います。

Cubeなどを作成してステージ上の適当な位置に障害物を設置しておきます。

障害物にNavMeshを反映

障害物をNavMeshに反映させるために、インスペクターからStaticを開いて「Navgation Static」を選択します。

NavMeshをベイクする

下準備が出来たら、さっそくベイクしてみましょう。

「Window」→「AI」→「Navgation」を選択します。続いて「Bake」タブをクリックします。

ベイク設定

Agent Radiusで半径、Heightで高さなどを調整できますが、とりあえずデフォルトのまま「Bake」ボタンを押してみましょう。

Navmeshをベイク

 

すると、青色の部分が表示されると思います。この領域が移動可能な範囲となります。

デフォルト状態だと、途中で範囲外となり移動できなくなってしまいそうですね。

Navmeshをベイク②

Agent Radiusを「0.2」に変更して再びベイクしてみると良い感じになりました。

NavMeshAgentコンポーネントをアタッチする

NavMesh上で敵を動かすには、NavMeshAgentを使うので、インスペクターの「Add Component」から「Nav Mesh Agent」を追加します。

このコンポーネントの値を調整することで、敵の移動速度や回転速度を変更できます。

デフォルトのままでも問題ないのでこのまま進めていきます。

プレイヤーを追跡するスクリプトの作成

敵の移動に関するスクリプトは、SlimeControllerに記述していたので、こちらを修正しました。

スクリプトを敵にアタッチして、ターゲットとなるプレイヤーをインスペクタから設定してゲームを実行してみます。

良い感じですね。ベイクされた移動範囲内で追いかけてくるようになりました。