Unity NavMeshでマス目ごとに停止しながらターゲットに向かうエージェントの実装方法
このチュートリアルでは、UnityでNavMeshエージェントを使用し、ターゲットに向かってマス目に沿って1マスずつ進みながら、一時停止を繰り返す動作を実現します。エージェントが各マスの中心に到達するごとに停止し、指定の時間待機してから再び移動を再開するようにします。
実行結果
このチュートリアルを進めた時の動きを先に見てみましょう
チュートリアル
ステップ1: NavMeshエージェントの設定
3Dプロジェクトを新規で作成します
プロジェクト名はGridPathFollowerSampleとしておきます
シーンにPlaneオブジェクトを追加
シーンに「3D Object > Plane」を選択して、平面を追加します。これはエージェントが移動する床として使用します。
NavMeshをベイク
Hierarkyウィンドウで右クリックし、「AI > NavMesh Surface」を選択して、エージェントの移動エリアを作成します

「Bake」ボタンを押します。これでPlaneの上がNavMeshエリアとして設定され、エージェントが移動できるようになります。

エージェントオブジェクトを作成
Planeの上に移動するオブジェクトとして「3D Object > Capsule」などのオブジェクトを追加し、「NavMeshAgent」コンポーネントをアタッチします。
ターゲットオブジェクトを作成
Capsuleが追跡するターゲットを設定するため、「3D Object > Cube」などのオブジェクトを追加し、これを移動先ターゲットとして使用します。
ステップ2: スクリプトの作成
スクリプトを作成
新しいC#スクリプトを作成し、「GridBasedAgent.cs」と名付けます。
スクリプトをエージェントオブジェクトにアタッチ
エージェントオブジェクト(Capsule)に、作成した「GridBasedAgent.cs」スクリプトをアタッチします。
ステップ3: マス目ごとの移動ロジックの実装
以下のコードをGridBasedAgent.cs
に追加し、エージェントがX軸とZ軸のみに沿ってターゲットに最短距離で向かうようにします。
コードの解説
- CalculateOptimizedGridPathメソッド
target
オブジェクトまでの経路を1マスごとに計算し、X軸とZ軸のみに沿って移動するようにしています。target
の位置に対して、X方向またはZ方向の距離が短い方を優先して進むため、エージェントは最短経路で移動します。
- Updateメソッド
- エージェントが次のマスに到達した際に停止し、
waitTime
だけ待機するようにしています。 arrivalThreshold
内に到達した場合に、キューから次のマスを取り出し、コルーチンを呼び出して待機させます。
- エージェントが次のマスに到達した際に停止し、
- WaitAndMoveToNextPointコルーチン
- 各マスごとにエージェントを停止し、指定の
waitTime
後に再び次のマスへ移動します。
- 各マスごとにエージェントを停止し、指定の
ステップ4: 実行と確認
- ターゲットオブジェクトの設定
- エージェントオブジェクト(例: Capsule)を選択し、インスペクターでスクリプトの「Target」にターゲットオブジェクト(例: Cube)をドラッグして設定します。
- 再生して動作確認
- 再生ボタンを押してシーンを実行し、エージェントがターゲットに向かってX方向かZ方向にのみ移動しながら、各マスで停止する様子を確認します。
注意点
- waitTime: 各マスでの待機時間を調整して、エージェントの停止時間を設定できます。
- gridSize: 1マスのサイズを設定します。通常は1.0に設定すると良いですが、環境に応じて変更してください。
- arrivalThreshold: マスへの到達距離の閾値を適切に調整し、エージェントが意図通りに停止するようにします。
このチュートリアルに従えば、エージェントがターゲットに向かって最短経路をX・Z方向でのみ移動し、各マスで待機する動作が実現できます。
ディスカッション
コメント一覧
まだ、コメントがありません