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 を使って、目的地となるオブジェクトを取得するようにしましょう。