Unityにて3Dのゲームを作っています。
Playerから逃げる敵AIを作っており、ある程度近づくと逃げていきある程度距離が出来るとランダムにウロウロ巡回させるようにさせたいのですが、ランダムにウロウロしてくれずPlayerと離れている時はずっとその場で止まったままになってしまいます。
近づくと逃げてはくれますが。。。
現段階でさせようとしているのは敵に目的地を指定させており、その目的地に向かって進むようにし、その目的地に近づくと別の目的地がランダムで決められ今度はそこへ敵が向かうという流れを使ってランダムでウロウロ巡回させようとしています。
Playerとの距離が近くなるとMove関数が呼ばれ逃げます。
目的地との距離が近くなるとDoPatrol関数が呼ばれ次の目的地がランダムで呼ばれるというしくみになっています。
ですが、なぜか敵は止まったままになってしまいます。
恐らく目的地という物が存在出来ていないのかなと思うのですが、解決出来ませんでした。
どうしたらランダムで巡回してくれるでしょうか。
現状のEnemyソースに間違いや足りない箇所などがあればアドバイスよろしくお願い致します。
【巡回AIの参考URL】
http://tongullman.blogspot.jp/2015/11/unity-navmesh-ai.html
【編集】
ソースを一部書き直しました。
参考にしたURLを貼りました。
質問の仕方が下手で申し訳ありません。
C#
1using UnityEngine; 2using System.Collections; 3 4public class Enemy : MonoBehaviour 5{ 6 public float m_speed = 2.0f; //移動速度 7 public float m_rotation; //回転速度 8 public Transform m_target; //追いかけるオブジェクト 9 NavMeshAgent m_agent; 10 11 private static Vector3 m_position; 12 private float m_patroldistance; 13 private float m_targetdistance; 14 15 void Awake() 16 { 17 m_agent = GetComponent<NavMeshAgent>(); 18 } 19 20 void Start() 21 { 22 DoPatrol(); 23 } 24 25 void Update() 26 { 27 m_patroldistance = Vector3.Distance(this.m_agent.transform.position,m_position); 28 m_targetdistance = Vector3.Distance(this.m_agent.transform.position, m_target.transform.position); 29 30 //Playerとの距離が30f以下になると逃げる 31 if(m_targetdistance <= 30f) 32 { 33 Move(); 34 }else if(m_patroldistance < 15f) 35 { 36 DoPatrol(); 37 }else 38 { 39 m_agent.SetDestination(m_position); 40 } 41 } 42 43 void Move() 44 { 45 //ターゲットの方向を求める 46 Vector3 vec = transform.position - m_target.position; //m_target.position - transform.position; 47 //ターゲットの方に向く 48 transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(new Vector3(vec.x, 0, vec.z)), m_rotation); 49 //進む方へ移動 50 transform.Translate(Vector3.forward * m_speed); 51 } 52 53 public void DoPatrol() 54 { 55 var x = Random.Range(-50.0f, 50.0f); 56 var z = Random.Range(-50.0f, 50.0f); 57 m_position = new Vector3(x, 0, z); 58 m_agent.SetDestination(m_position); 59 } 60} 61
回答3件
あなたの回答
tips
プレビュー