LoginSignup
17
5

More than 3 years have passed since last update.

【Unity】Navigationを使って経路探索させる

Last updated at Posted at 2019-12-23

概要

今回は以下のようなシンプルなプロジェクトを作り、Navigationの超基本的な使い方を学びます。

今回のプロジェクトでは、Unityちゃんがプレイヤー、赤いCubeが目的地になっています。

Qiita4.gif

【この記事の対象】 初中級程度の方

Navigationとは?

UnityにはNavigatonという機能が搭載されています。

Navigationとはシーンのジオメトリから生成されるナビゲーションメッシュを使用して、ゲームの世界を知的に歩くことのできる機能です。
(Unity公式リファレンスより:ナビゲーションと経路探索

今回はNavMeshAgentというコンポーネントを使ってNavigationを使っていきたいと思います。

1.GameObjectを配置

まずは任意の場所にプレイヤー、目的地、障害物、地面を配置します。

スクリーンショット 2019-12-14 11.54.43.png

今回はそれぞれのGameObjectに

種類      名前
プレイヤー(Unityちゃん) Player
目的地(Red) Destination
障害物(Green) Obstacle
地面(White) Ground

という名前をつけました!

2.NavMeshAgentをつける

次に今回の記事の要であるComponentのNavMeshAgentをつけていきます。

NavMeshAgentは経路探索をして、動いて欲しいObjectにアタッチします。
今回のプロジェクトではPlayerにアタッチします。

スクリーンショット 2019-12-14 10.51.22.png

3.Playerのスクリプトを書く

次にPlayerのスクリプトを書いていきます。

PlayerController.cs

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

public class PlayerController : MonoBehaviour
{
    NavMeshAgent Player_Nav;
    GameObject Destination;

    void Start()
    {
        //プレイヤーのNavMeshAgentを取得
        Player_Nav = GetComponent<NavMeshAgent>();
        //目的地のオブジェクトを取得
        Destination = GameObject.Find("Destination");
    }

    void Update()
    {
        //目的地を設定
        Player_Nav.SetDestination(Destination.transform.position);
    }
}

ポイントは

   1.名前空間using UnityEngine.AIを記入しているか
   2.PlayerのNavMeshAgentをきちんと取得できているか
   3.SetDestinationをきちんと書いている(目的地の指定ができている)

の3点です!!

4.NavigationWindowを開く

次にPlayerが行動できる範囲を指定するために、NavigationWindowを開きます。
navigationwindow.gif

5.移動範囲をBakeする

それではPlayerの移動範囲を指定していきましょう。

Ground、Obstacleを選択し、Inspectorビュー内のStaticの横にある三角をクリックし、Navigation Staticを選択します。

About Static.gif

次に歩かせる範囲と歩かせない範囲を指定します。

範囲の指定にはNavigationWindowのObjectのNavigation Areaの部分をいじっていきます。

Navigation Area 機能
Walkable 選択したエリアが歩けるようになる
Not Walkable 選択したエリアが歩けないようになる
Jump auto-generated、Off-Mesh Links の際に利用する(今回は使用しません)

スクリーンショット 2019-12-14 12.12.09.png

今回のプロジェクトにおいて歩かせる範囲はGround、歩かせない範囲はObstacleにあたるので、
GroundをWalkableに、ObstacleをNot Walkableに設定します。

以上の設定が完了したら、NavigationビューBakeの右下にあるBakeをクリックして移動範囲の指定を完了させます。

Bake3.gif

上の画像のように、移動範囲が青く表示されたら完了です!!!

6.動かしてみる

以上の設定が終わったらプレビューボタンを押してみましょう。

Preview.gif

PlayerのUnityちゃんが自動で経路探索し、指定範囲の上を歩きましたね!!
これでNavigation機能を使うことができました!!

最後に

いかがだったでしょうか?

Navigation機能はこんなに簡単に実装できてしまうんです。

次回の記事ではNavigation機能を使用して、動く障害物を避ける方法をご紹介したいと思います。

17
5
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
5