ナビゲーションメッシュを使い、敵に地形を判断させる

<動作概要>

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」。
あとは、ナビメッシュエージェントに冒頭のソースコードをアタッチして、実行するだけ。ソースコードではナビメッシュエージェントの目的地を設定している。目的地までの最短経路がナビゲーションメッシュを使って計算される。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です