#概要
今回は以下のようなシンプルなプロジェクトを作り、Navigationの超基本的な使い方を学びます。
今回のプロジェクトでは、Unityちゃんがプレイヤー、赤いCubeが目的地になっています。
【この記事の対象】 初中級程度の方
#Navigationとは?
UnityにはNavigatonという機能が搭載されています。
Navigationとはシーンのジオメトリから生成されるナビゲーションメッシュを使用して、ゲームの世界を知的に歩くことのできる機能です。
(Unity公式リファレンスより:ナビゲーションと経路探索)
今回はNavMeshAgentというコンポーネントを使ってNavigationを使っていきたいと思います。
#1.GameObjectを配置
まずは任意の場所にプレイヤー、目的地、障害物、地面を配置します。
![スクリーンショット 2019-12-14 11.54.43.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F541729%2F429f6866-0c20-a680-cfac-f816295dd84f.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=499884d20600d1b98b21a823da5a08a9)
今回はそれぞれのGameObjectに
種類 | 名前 |
---|---|
プレイヤー(Unityちゃん) | Player |
目的地(Red) | Destination |
障害物(Green) | Obstacle |
地面(White) | Ground |
という名前をつけました! |
#2.NavMeshAgentをつける
次に今回の記事の要であるComponentのNavMeshAgentをつけていきます。
NavMeshAgentは経路探索をして、動いて欲しいObjectにアタッチします。
今回のプロジェクトではPlayerにアタッチします。
![スクリーンショット 2019-12-14 10.51.22.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F541729%2F8ed16bec-3270-60dd-923e-4a7eec00b4c4.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=eb5b1f5f4271f30639809257d8b63bdb)
#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 の際に利用する(今回は使用しません) |
![スクリーンショット 2019-12-14 12.12.09.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F541729%2F06596af3-3fdc-80a6-9658-42b9fc635e48.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=9b01d68b8bc4cc4596f7b81166328fb2)
今回のプロジェクトにおいて歩かせる範囲はGround、歩かせない範囲はObstacleにあたるので、
GroundをWalkableに、ObstacleをNot Walkableに設定します。
以上の設定が完了したら、NavigationビューBakeの右下にあるBakeをクリックして移動範囲の指定を完了させます。
上の画像のように、移動範囲が青く表示されたら完了です!!!
#6.動かしてみる
以上の設定が終わったらプレビューボタンを押してみましょう。
PlayerのUnityちゃんが自動で経路探索し、指定範囲の上を歩きましたね!!
これでNavigation機能を使うことができました!!
#最後に
いかがだったでしょうか?
Navigation機能はこんなに簡単に実装できてしまうんです。
次回の記事ではNavigation機能を使用して、動く障害物を避ける方法をご紹介したいと思います。