Unityに用意されている経路探索機能を紹介する。
NavMesh(ナビゲーション メッシュ)をシーンのゲームオブジェクトに設定することで、敵キャラクターなどの移動用の通路を設定できる。
NavMeshの設定された範囲でNavMesh Agentを設定したゲームオブジェクトを目標地点やプレイヤーキャラクタに向けて移動させることができる。
レポートフォルダに以下の内容を作業したプロジェクトを NavMeshTest.zip として置いておく。動作を試したり課題作成に利用してよい。
準備1
AI Navigation Packageをインストールする。
Window → Package Manager
左上の「+」ボタン → "Add pakage by name…"
以下を入力
com.unity.ai.navigation
準備2
シーン内のGameObjectに static Navigation を設定する。設定対象は地面・通路・坂・階段・壁など通行に影響を与えるもの全て。
準備3
敵キャラ(ナビゲーション対象)にNavMesh Agentを追加
敵キャラにC#スクリプトを追加
下記のコード参照。
追跡対象(移動目標)のゲームオブジェクト(Playerなど)をセットする。
準備4
シーンにNavMesh Surfaceを追加
Inspectorから Bake する。
上掲の動画ではNavMesh Agentは動く障害物を回避して移動はしない。そのまま突っ切る。
動く障害物の回避は以下の参考リンクの記事を参照。
他にも、巡回地点の設定など手軽に役に立ちそうな記事が有る。
裂け目をジャンプして飛び越える・崖を飛び降りる・クリックで移動目標を設定なども実装方法を検索すると見つかる。Unity公式の記事もある。
参照:
【Unity】はじめての NavMesh 入門【AIによる経路移動】
ナビゲーションと経路探索 Unity公式リファレンスの古い記事
Unity NavMeshチュートリアル Unity学習コンテンツ Unity Learnの記事(英語版。字幕ON+自動翻訳で対処されたし)
【Unity】ナビゲーションシステムでAgent Typeを複数作る方法
Compatible with Unity These package versions are available in Unity version 2022.2
【Unity】エージェントタイプごとにナビメッシュを作る
エージェントに幾つかの地点を巡回させる Unity公式(古い記事)