個人的勉強メモ置き場

プログラミングど素人のメモ置き場

NavMeshを今さら勉強したお話

先日読み進めていたお本にてNavMeshの項目があった。以前のUnity1weekでもNavMeshを使ったゲームがあり、面白そうだなと思っていたのでこの機会に勉強するぞい


↓ めちゃんこ参考にさせて頂いたサイトなど

docs.unity3d.com
www.youtube.com
www.urablog.xyz

NavMeshってなんぞ?

Unity標準のナビゲーションシステムで経路探索をしてキャラクターを目的地まで移動させることができるなんかすごいやつ。障害物を設定したりもできるぞ!
主に経路探索(NavMesh)とキャラクターの移動(Agent)の2つの機能の組み合わせでつくるみたいだ。

物は試しということで触ってみる

Window → AI → NavigationでNavigationウィンドウを開きます

f:id:zykb:20201021210423p:plain

色々設定できるプロパティはあるんですが詳しくは公式のドキュメントを見ましょう。画面右下のベイクを押してみます。
すると青色のオーバーレイとして進行できる領域が表示されました!

f:id:zykb:20201021210011p:plain

オブジェクトがこのベイキング処理に含まれるようにするにはオブジェクトをNavigation Staticにする必要があります。↓のどちらかの方法で設定しましょう。

f:id:zykb:20201021211704p:plain  f:id:zykb:20201021211708p:plain

目的地へ移動させる

実際にオブジェクトを動かすにはNavMeshAgentコンポーネントをつける必要があります。今回は黄色いボールをプレイヤーとしてAgentをつけ、ゴールのシリンダーまで動かしてみよう。

f:id:zykb:20201021224449p:plain

プレイヤーオブジェクトにNavMeshAgentコンポーネントとPlayerControllerをアタッチ。これはAgentに目的地の座標を指定する必要があるため。

f:id:zykb:20201021224733p:plain

PlayerControllerのスクリプトはこちら。至ってシンプル。

using UnityEngine;
using UnityEngine.AI;

public class PlayerController : MonoBehaviour
{
    [SerializeField]
    private Transform target;

    void Start()
    {
        NavMeshAgent agent = GetComponent<NavMeshAgent>(); 
        agent.destination = target.position;
    }
}

これで準備はオッケー。動かしてみよう!

f:id:zykb:20201021224044g:plain
そこ通るんかい

~たぶん続く~