Django Girls and Boys 備忘録

Python、Selenium、Django、java、iPhoneアプリ、Excelマクロなどで気付いたこと、覚えておきたいことなどを載せていきます。

【Unity】NavMesh、NavMeshAgentの使用方法

 

 

 UnityのNavMeshAgentはキャラクターやオブジェクトをナビゲーションメッシュ(NavMesh)上で移動させるための非常に便利なツールです。

 

ここでは、NavMeshAgentの基本的な導入方法と使い方について説明します。

 

 

目次

 

 

1.プロジェクトの準備

 


まず、Unityの新しいプロジェクトを作成します。3Dプロジェクトを選択して、シーンにいくつかのオブジェクト(地形、障害物、プレイヤーなど)を追加しておきます。

 

2.地形の作成とNavMeshのベイク

 


NavMeshは、オブジェクトが移動できる領域を定義するために使用されます。

地形や床となるオブジェクトをまず配置し、次にその上をオブジェクトが動けるようにNavMeshをベイクします。

 

1.地形や床オブジェクトを選択
地形や床になるオブジェクトを選択し、インスペクタの名称横の「Static」のプルダウンメニューをクリックし「Navigation Static」を選択します。

 

2.NavMeshのベイク
次に、メニューから「Window」→「AI」→「Navigation」を開きます。

「Bake」タブに移動し、タブ名下の「Bake」ボタンをクリックし、タブ内下の「Bake」をクリックしてNavMeshを生成します。

これで、オブジェクトが移動可能なエリアが作成されます。

 

 

3.NavMeshAgentの追加

 


次に、キャラクターやオブジェクトにNavMeshAgentを追加します。

 

1.オブジェクトの選択
移動させたいオブジェクト(例えばCubeなど、仮に名称を「People」とします)を選択し、インスペクタの「Add Component」ボタンから「NavMeshAgent」を追加します。

 

2.NavMeshAgentの設定
NavMeshAgentのパラメータを調整します。

例えば、移動速度 (Speed) や回転速度 (Angular Speed)、停止距離 (Stopping Distance) を調整することで、エージェントの動きをカスタマイズできます。

 

4.スクリプトでエージェントを制御

 


NavMeshAgentを使って目的地に向かってオブジェクトを移動させるために、スクリプトを作成します。

以下のようなシンプルなスクリプトを作成し、オブジェクトに追加します。

 

1.スクリプト追加手順

プロジェクト内「+」→「C# Script」にてスクリプトを追加し先程と同じように名称を「People」にします。

先程の「NavMeshAgent」を追加したオブジェクト(名称:People)にアタッチします。

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;

public class People : MonoBehaviour
{
    public Transform target; // 移動したい目的地のターゲット
    private NavMeshAgent agent;

    void Start()
    {
        agent = GetComponent<NavMeshAgent>(); // NavMeshAgentを取得
    }

    void Update()
    {
        agent.SetDestination(target.position); // ターゲットの位置に向かって移動
    }
}

 

 

5.ターゲットを設定する

 


シーン内にターゲットとして移動先のオブジェクト(例えばCubeなど)を配置し、先程作成して「People」オブジェクトに追加したスクリプト内のtargetフィールドにドラッグ&ドロップします。

これにより、エージェントがそのターゲットに向かって移動するようになります。

 

6.実行と確認

 


シーンを再生して、NavMeshAgentが指定したターゲットに向かって移動するか確認します。

エージェントが地形に沿って滑らかに移動し、障害物を避ける動きをするはずです。

 

7.まとめ

 


NavMeshAgentを使うことで、キャラクターやオブジェクトの自動移動やナビゲーションを簡単に実現できます。NavMeshのベイクとNavMeshAgentの設定をしっかり行い、目的地までの移動をスムーズに行えるように調整しましょう。

 

関連記事:

【Unity】Unityで親オブジェクトにアクセスする方法 - Django Girls and Boys 備忘録

 

【Unity】NavMeshを設定した環境で「"GetRemainingDistance" can only be called on an active agent that has been placed on a NavMesh.」のようなエラーが発生した場合の対応方法 - Django Girls and Boys 備忘録

 

【Unity】Unityで背景を設定する方法 - Django Girls and Boys 備忘録

 

【Unity NavMesh】NavMeshObstacleを追加する方法 - Django Girls and Boys 備忘録

 

【Unity】NavMesh、NavMeshAgentの使用方法 - Django Girls and Boys 備忘録

 

【Unity】オブジェクトの影(シェイド)を消す方法 - Django Girls and Boys 備忘録

 

【Unity】オブジェクトの影をなくす方法 - Django Girls and Boys 備忘録