NavMeshAgentを利用した自動移動を、生成されたPrefabオブジェクトでも出来るしくみを作成してみましょう。
AIナビゲーションで追いかけるターゲットは、Prefabのスクリプトから取得するようにします。
*Unity2022.3.28で作成しています。

NavMeshAgentで自動追尾できるPrefab
まずはAI Navigationのインストールから行います。
ウィンドウ > パッケージマネージャー

Unityレジストリー > AI Navigation > インストール

Plane(平面)とCylinder(シリンダー)を作成して、配置します。

PlaneとCylinderの静的にチェックを入れます。

ベイクする対象物としてPlaneを選択。
コンポーネントを追加 > Navigation > NavMeshSurface

Bakeをクリック。

移動可能エリアが表示されます。

追いかけるターゲットとして、Sphereを作成しました。

Cubeを作成します。
Navigation > NavMeshAgentを追加。

CubeMove.csを作成し、Cubeに追加します。

CubeMove.csを記述します。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.AI; //ナビゲーションを使う際に必要 public class CubeMove : MonoBehaviour { public GameObject target; void Start() { target = GameObject.Find("Sphere"); NavMeshAgent agent = GetComponent<NavMeshAgent>(); agent.destination = target.transform.position; } } |
Cubeをプロジェクトビューにドラッグ&ドロップして、プレハブ化します。

Cubeの元データは削除しましょう。

空のオブジェクトを作成します。
ここにプレハブ生成のプログラムを作成することにします。
CloneScript.csを作成し、GameObject(空のオブジェクト)に追加します。

CloneScript.csを記述します。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class CloneScript : MonoBehaviour { public GameObject prefab; void Start() { InvokeRepeating("CubeSpawn", 0, 1.0f); } void CubeSpawn() { Instantiate(prefab, new Vector3(3.0f, 0.5f, 3.0f), Quaternion.identity); } } |
プレハブのフィールドに、Cubeを入れます。

ゲームプレイしてみましょう。

生成されたプレハブがNavigationによって、自動でターゲットに向かって移動します。
プレハブでは、GameObject.Find を使って、目的地となるオブジェクトを取得するようにしましょう。