【Unity】NavMeshAgentでプレイヤーを追跡する敵AIを作ろう!

Unity

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の作り方を紹介していきたいと思います。

コメント

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