敵に近づくと追いかけてきて、離れるとストップする仕組みを、NavMeshAgentを使って作成してみましょう。
プレーヤーを操作し、敵のエリア内(半径)に入ると、追いかけてきます。
敵から逃げて、距離を取れば、追いかけずに動きが止まります。
関連記事:
エリアに入れば追いかけられる(NavMeshAgent)
特定の座標まで行けば追いかけてくる(NavMeshAgent)
特定エリアに近づくと追いかけてくる
一定距離から外れたら実行する
NavMeshAgentで浮いてしまう場合の対処法
距離を取れば追いかけられない
PlaneとCylinderをいくつか作成し、適当なところに配置します。
すべてのオブジェクトの静的にチェックを入れます。
ナビゲーションウィンドウから、Bakeをクリックします。
シーンビューでは、このようにナビメッシュが表示されました。
ナビメッシュの範囲を通って、敵が追いかけてくることになります。
敵キャラであるSphereを作成し、端の方に配置します。
Sphereコライダーの半径を5にして、トリガーにするにチェックを入れます。
NavMeshAgentを追加します。
コンポーネントを追加 > ナビゲーション > NavMeshAgent
EnemyMove.csを作成し、Sphereに追加します。
EnemyMove.csを記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.AI; public class EnemyMove : MonoBehaviour { NavMeshAgent agent; [SerializeField] GameObject target; private bool isArea; void Start() { agent = GetComponent<NavMeshAgent>(); } void Update() { if(isArea) { agent.destination = target.transform.position; } else if(!isArea) { agent.destination = this.transform.position; } } void OnTriggerStay(Collider other) { if (other.gameObject.name == "Cube" ) { isArea = true; } } void OnTriggerExit(Collider other) { if (other.gameObject.name == "Cube" ) { isArea = false; } } } |
using UnityEngine.AI; を忘れずに書いておきましょう。
プレーヤーの作成
続いて、プレーヤーとしてCubeを作成し、適当なところに配置。
リジッドボディを追加します。
PlayerMove.csを作成し、Cubeに追加します。
PlayerMove.csを記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerMove : MonoBehaviour { private float speed = 0.05f; void Update() { if (Input.GetKey(KeyCode.UpArrow)) { transform.Translate(0f, 0f, speed); } if (Input.GetKey(KeyCode.DownArrow)) { transform.Translate(0f, 0f, -speed); } if (Input.GetKey(KeyCode.LeftArrow)) { transform.Translate(-speed, 0f, 0f); } if (Input.GetKey(KeyCode.RightArrow)) { transform.Translate(speed, 0f, 0f); } } } |
Sphereを選択し、ターゲットのフィールドに、Cubeを入れます。
ゲームプレイしてみましょう。
敵のコライダー半径5以内に入れば追いかけてきて、そこから離れると敵は停止します。
関連記事:
エリアに入れば追いかけられる(NavMeshAgent)
特定の座標まで行けば追いかけてくる(NavMeshAgent)
特定エリアに近づくと追いかけてくる
一定距離から外れたら実行する
NavMeshAgentで浮いてしまう場合の対処法