ナビゲーションメッシュを使い、敵に地形を判断させる
<動作概要>
Unity標準機能のナビゲーションメッシュを使って、敵に地形を判断させる。今回は球を敵と見立てて、Unityちゃんを追いかけるようにした。球は障害物を避けたり、坂を登ったりしてUtityちゃんを追いかける。基本的にUnity公式サイトの説明が一番分かりやすいと思う。https://docs.unity3d.com/ja/2019.3/Manual/Navigation.html
<動作環境>
Unity 2019.3.9f1
<ソースコード>
以下ソースコードを”ナビメッシュエージェント”にアタッチする。今回は ナビメッシュエージェント=球。ナビメッシュエージェント については後述。ソースコードは以下公式サイトを参考にした。https://docs.unity3d.com/ja/2019.3/Manual/nav-CreateNavMeshAgent.html
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
public class MoveTo : MonoBehaviour
{
public Transform goal;
NavMeshAgent agent;
void Start()
{
agent = GetComponent<NavMeshAgent>();
}
private void Update()
{
agent.destination = goal.position;
}
}
<解説>
①ナビゲーションメッシュを生成
(用語の定義は普通に間違ってるかもしれないのでご注意!!)
ナビゲーションメッシュとは、地形の情報を表したデータ構造のこと。
敵は目的地までの経路の判断材料として、ナビゲーションメッシュを使う。
以下、ナビゲーションメッシュの作り方
(1)ナビゲーションメッシュタブを開く
「Window」→「AI」→「Navigation」

(2)ナビゲーションメッシュをベイクする
ベイクとは 計算して ナビゲーションメッシュを求めること。Navigationタグ内の設定項目をいじくって、Bakeボタンを押すことで自動的にナビゲーションメッシュが構築される。
最低限の設定項目として、ベイク処理に含めるオブジェクトの「Navigation static」をチェックする必要がある。その他設定項目については公式サイトを参照されたい。



上図が作成したナビゲーションメッシュ。水色とピンク色のところをナビメッシュエージェントが移動できる。ちなみにピンク色のところは坂道になっており、水色の箇所よりも移動コストがかかるように設定した。移動コストは目的地までの経路の算出に影響する。ナビメッシュエージョントの移動は、トータルの移動コストが低くなる経路に沿って行われる。
② ナビメッシュエージェントを設定する
“ナビメッシュエージョント”とは①で作成したナビゲーションメッシュを使って移動するオブジェクトのこと。
以下、ナビメッシュエージョントの設定方法
(1)移動させるオブジェクトにNavMeshAgentコンポーネントをアタッチする
今回は球に NavMeshAgentコンポーネントをアタッチする。Inspectorタブから「Add Componet」→「Navigation」→「NavMeshAgent」。
あとは、ナビメッシュエージェントに冒頭のソースコードをアタッチして、実行するだけ。ソースコードではナビメッシュエージェントの目的地を設定している。目的地までの最短経路がナビゲーションメッシュを使って計算される。
