前提・実現したいこと
- NavmeshAgent
- エージェントが複数の目的地を配列の目的地を巡回する
- 目的地に一定時間滞在する
- 目的地にたどり着く前に、エージェントを認識する
以下のどちらかを実現したい
0. エージェントがいれば、エージェントがいなくなるまで待つ
0. エージェントがいれば、次の目的地を入れる
発生している問題・エラーメッセージ
複数エージェントいるため目的地で重なるまたは衝突するときがある
public class Patrol : MonoBehaviour { // 巡回地点オブジェクトを格納する配列 public Transform[] points; // 巡回地点のオブジェクト数(初期値=0) private int destPoint = 0; // NavMesh Agent コンポーネントを格納する変数 private NavMeshAgent agent; // 滞在時間を計測する変数 private float countup; //滞在時間用の変数 public float remainTime = 1.0f; void Start() { // 変数"agent"に NavMesh Agent コンポーネントを格納 agent = GetComponent<NavMeshAgent>(); // 巡回地点間の移動を継続させるために自動ブレーキを無効化 //(エージェントは目的地点に近づいても減速しない) agent.autoBraking = false; // 次の巡回地点の処理を実行 GotoNextPoint(); } // 次の巡回地点を設定する処理 void GotoNextPoint() { // 巡回地点が設定されていなければ if (points.Length == 0) { // 処理を返します return; } // 現在選択されている配列の座標を巡回地点の座標に代入 agent.destination = points[destPoint].position; // 配列の中から次の巡回地点を選択(必要に応じて繰り返し) destPoint = (destPoint + 1) % points.Length; } // ゲーム実行中の繰り返し処理 void Update() { // エージェントが現在の巡回地点に到達したら if (!agent.pathPending && agent.remainingDistance < 0.5f) { countup += Time.deltaTime; // 次の巡回地点を設定する処理を実行 if(countup >= remainTime) { GotoNextPoint(); } } } }
補足情報(FW/ツールのバージョンなど)
Unity ver2020.3.12.f1
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/07/22 04:52
2021/07/22 04:58
2021/07/22 08:45