#概要
今回は以下のようなシンプルなプロジェクトを作り、Navigationの超基本的な使い方を学びます。
今回のプロジェクトでは、Unityちゃんがプレイヤー、赤いCubeが目的地になっています。
【この記事の対象】 初中級程度の方
#Navigationとは?
UnityにはNavigatonという機能が搭載されています。
Navigationとはシーンのジオメトリから生成されるナビゲーションメッシュを使用して、ゲームの世界を知的に歩くことのできる機能です。
(Unity公式リファレンスより:ナビゲーションと経路探索)
今回はNavMeshAgentというコンポーネントを使ってNavigationを使っていきたいと思います。
#1.GameObjectを配置
まずは任意の場所にプレイヤー、目的地、障害物、地面を配置します。
今回はそれぞれのGameObjectに
種類 | 名前 |
---|---|
プレイヤー(Unityちゃん) | Player |
目的地(Red) | Destination |
障害物(Green) | Obstacle |
地面(White) | Ground |
という名前をつけました! |
#2.NavMeshAgentをつける
次に今回の記事の要であるComponentのNavMeshAgentをつけていきます。
NavMeshAgentは経路探索をして、動いて欲しいObjectにアタッチします。
今回のプロジェクトではPlayerにアタッチします。
#3.Playerのスクリプトを書く
次にPlayerのスクリプトを書いていきます。
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を開きます。
#5.移動範囲をBakeする
それではPlayerの移動範囲を指定していきましょう。
Ground、Obstacleを選択し、Inspectorビュー内のStaticの横にある三角をクリックし、Navigation Staticを選択します。
次に歩かせる範囲と歩かせない範囲を指定します。
範囲の指定にはNavigationWindowのObjectのNavigation Areaの部分をいじっていきます。
Navigation Area | 機能 |
---|---|
Walkable | 選択したエリアが歩けるようになる |
Not Walkable | 選択したエリアが歩けないようになる |
Jump | auto-generated、Off-Mesh Links の際に利用する(今回は使用しません) |
今回のプロジェクトにおいて歩かせる範囲はGround、歩かせない範囲はObstacleにあたるので、
GroundをWalkableに、ObstacleをNot Walkableに設定します。
以上の設定が完了したら、NavigationビューBakeの右下にあるBakeをクリックして移動範囲の指定を完了させます。
上の画像のように、移動範囲が青く表示されたら完了です!!!
#6.動かしてみる
以上の設定が終わったらプレビューボタンを押してみましょう。
PlayerのUnityちゃんが自動で経路探索し、指定範囲の上を歩きましたね!!
これでNavigation機能を使うことができました!!
#最後に
いかがだったでしょうか?
Navigation機能はこんなに簡単に実装できてしまうんです。
次回の記事ではNavigation機能を使用して、動く障害物を避ける方法をご紹介したいと思います。