ナビメッシュエージェント(NavMeshAgent)による追いかけ機能について、もう少し機能を追加してみましょう。
今回は、ある座標までたどり着いたときに、敵キャラが追いかけてくる仕組みをつくります。
プレーヤーを動かして、X座標0を越えれば敵が追いかけてきて、X座標0を下回れば、追尾をやめます。
今回の制作は、以前の ナビメッシュエージェントを使った追尾機能
にコードを追加します。
あらかじめ、こちらを作成しておいてください。
以前の記事:ナビメッシュエージェントを使った追尾機能
プレーヤー(追いかけられる側)のスクリプト
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 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerMove : MonoBehaviour { public bool isArea; void Start() { isArea = false; } 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); } if(transform.position.x > 0) { isArea = true; } else { 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 24 25 26 27 |
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; } else { agent.destination = this.transform.position; } } } |
ゲームプレイして、プレーヤーを動かしてみましょう。
プレーヤーのX座標が0を越えたタイミングで、追尾がはじまります。
そこから離れると、追いかけるのをやめます。
関連記事:
エリアに入れば追いかけられる(NavMeshAgent)
NavMeshAgentで浮いてしまう場合の対処法