LookAtを使ってプレイヤーを追う敵を作りましたが、障害物を避けたり、プレイヤーとの適切な距離で止まって攻撃をしたりと敵AIの基本動作ができません。
そんな、悩みを解決するのが「NavMeshAgent」です。
今回は、このコンポーネントを使用し追尾するてきAIの作り方を紹介していきたいと思います。
準備
追尾対象となるプレイヤーを用意

主役の敵を用意

適当にオブジェクトを配置したステージ

これで、準備完了
NavMeshAgentをアタッチ
敵のインスペクターから「NavMeshAgent」をアタッチしましょう。

このコンポーネントはインスペクターでいろいろいじれますが、ひとまずはデフォルトの状態で使用していきます。
地面にNavMeshを適用
敵に「ここで動いてもいいエリアなんだな」と判断させるために地面や障害物にNavMeshをベイクします。
ステージ上で移動をするエリア(地面や障害物)をすべて選択します。

選択したらインスペクターの右上にあるStaticのチェックを入れましょう。

それでは、ベイク作業に入りましょう。
Window>AI>NavigationでNavigationウィンドウを開きます。

地面や障害物をすべて選択し「Bake」でNavMeshを適用
注意:オブジェクトの位置や大きさなどを変更途中で変更したりすると、NavMeshの経路情報を更新しないといけなくなるので再度Bakeしましょう。


追跡スクリプト
using System.Collections;
using System.Collections.Generic;
using UnityEngine.AI;
using UnityEngine;
public class EnemyNavAI : MonoBehaviour
{
[SerializeField] Transform Target;
NavMeshAgent Nav;
void Start()
{
Nav = GetComponent<NavMeshAgent>();
}
void Update()
{
Nav.SetDestination(Target.transform.position);
}
}
このスクリプトを敵にアタッチ
Targetという項目がありますのでそこに追跡対象を入れましょう。

これで実行をしてみますと

こんな感じで敵は段差でつまづかず、障害物を避けながらプレイヤーを追跡するようになりました!
まとめ
次回は、敵に近づいたら追跡をするAIの作り方を紹介していきたいと思います。
コメント