ナビメッシュエージェントを使った追尾機能で、エリアに入れば追いかけてくる仕組みをつくってみましょう。
今回の制作は、前回の ナビメッシュエージェントを使った追尾機能
の続きから、作成していきます。
NavMeshAgentの基本的な使いかたについて、解説しています。あらかじめ作成しておいてください。
前回記事:ナビメッシュエージェントを使った追尾機能
エリアの作成
空のオブジェクトを作成し、名前をChaseAreaに変更します。
新しくSphereColliderを追加します。
コンポーネントを追加 > 物理 > スフィアコライダー
トリガーにするにチェックを入れ、半径を5にし、位置を変更します。
プレーヤー(追いかけられる側)のスクリプト
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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerMove : MonoBehaviour { public bool isArea; void Update() { if (Input.GetKey(KeyCode.UpArrow)) { transform.Translate(0f, 0f, 0.05f); } if (Input.GetKey(KeyCode.DownArrow)) { transform.Translate(0f, 0f, -0.05f); } if (Input.GetKey(KeyCode.LeftArrow)) { transform.Translate(-0.05f, 0f, 0f); } if (Input.GetKey(KeyCode.RightArrow)) { transform.Translate(0.05f, 0f, 0f); } } void OnTriggerStay(Collider other) { if (other.gameObject.name == "ChaseArea" ) { isArea = true; } } void OnTriggerExit(Collider other) { if (other.gameObject.name == "ChaseArea" ) { isArea = false; } } } |
敵キャラ(追いかける側)のスクリプト
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 |
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.AI; public class EnemyMove : MonoBehaviour { NavMeshAgent agent; public GameObject target; void Start() { agent = GetComponent<NavMeshAgent>(); } void Update() { if(target.GetComponent<PlayerMove>().isArea == true) { agent.destination = target.transform.position; } } } |
ゲームプレイしてみましょう。
範囲内(ChaseArea)に入れば、Sphereが追いかけてきて、範囲かれ出れば、追尾が止まります。
関連記事:
特定の座標まで行けば追いかけてくる(NavMeshAgent)
特定エリアに近づくと追いかけてくる
特定エリアに入った時は実行不可にする
NavMeshAgentで浮いてしまう場合の対処法