【Unity】敵がプレイヤーを追いかけるようにする方法

Unity

スポンサーリンク

敵がプレイヤーを追いかけるようにしてみよう。

敵を作る

1.「Asset Store」から敵をインポートする(今回は例として「Level 1 Monster Pack」をインポート)

2.ステージに敵のPrefabを置く。

※この敵はデフォルトでは小さすぎるので、Scaleを調整する。今回は各Scaleを30にした。

※影がないので表示したい場合は、Hierarchyの以下のLV1をクリックして、

Inspectorウィンドウの以下のShaderの値を"Standard"にする。

NavMeshをベイクする

敵が動ける範囲をNavMeshというものを使用して、設定する。
これを使えば、途中に障害物があっても避けながら移動してくれます。

1.地形や障害物を"Navigation Static"にする(こうしないとあとの手順の"Bake"ボタンを押しても反応しない)

こんな感じで地形と障害物を選択して、

Inspectorウィンドウの右上の"Static"の▼をクリックして、"Navigation Static"にする。

2.以下の場所のNavigationをクリックしてウィンドウを表示する。

3.Navigationウィンドウの「Bake」タブを選択する。

4.いろいろ設定値はあるが、今回はデフォルトのまま"Bake"ボタンを押す(設定値は各自で調べてください)
パソコンの性能によっては時間がかかる。

5.動ける範囲が青色で表示される。

敵にNavMeshAgentをアタッチする

NavMeshAgentをアタッチされた敵は、NavMeshでBakeした範囲の中を移動しながら目的地に行くようになる。

1.敵にNavMeshAgentをアタッチする。

敵を選択

Inspectorウィンドウで"Add Component"ボタンを押下して、
“Nav Mesh Agent"を追加

“Nav Mesh Agent"の設定値を変えれば、移動速度や障害物回避精度を変えれるが割愛

敵がプレイヤーを追いかけるようにする

敵がプレイヤーを追いかけるようにするためのスクリプトを作成して、敵にアタッチします。

1.目的地(プレイヤ―の場所)を指定するスクリプトを作成

ファイル名はEnemyMove.csとする。


ソースは以下

using UnityEngine;
using UnityEngine.AI;

[RequireComponent(typeof(NavMeshAgent))]
public class EnemyMove : MonoBehaviour
{
    [SerializeField] private GameObject player;
    private NavMeshAgent navMeshAgent;

    // Start is called before the first frame update
    void Start()
    {
        // NavMeshAgentを保持しておく
        navMeshAgent = GetComponent<NavMeshAgent>();
    }

    // Update is called once per frame
    void Update()
    {
        // プレイヤーを目指して進む
        navMeshAgent.destination = player.transform.position;
    }
}

2.EnemyMove.csを敵にアタッチする。

敵を選択する

EnemyMove.csをドラックアンドドロップでアタッチ

3.敵が追いかける対象のGameObject(今回はPlayer)をPlayerプロパティに入れる。

実行

これで実行すると、敵がプレイヤーを追いかけるようになる。

スポンサーリンク

Unity

Posted by ton