[Unity]NavMeshを改めておさらい。

UnityのNavMeshを改めておさらいするということで簡単なEnemyもどきが目的地へ行くものを実装していきます。
#1,移動できる範囲を設定しよう
地面となる床を配置していきましょう。HierarchyのCreateから3DObject→Planeです。
<img width="323" alt="1.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482043/388b0926-1780-9e68-33c9-d17bd00e6b39.png">

とりあえず床が実装できましたね。
<img width="481" alt="2.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482043/d4b32936-d8a5-365d-e38f-f409cffaf3da.png">

では早速移動できる範囲、NavMeshを実装していきましょう。
まず、Planeを選択してInspector（詳細）を表示します。
Inspectorにオブジェクトの名前が書かれている部分があります。その右に**static**と書かれている部分があり、staticの近くにある逆三角形をクリックし**Navigation Static**と書かれている部分を選択します。
<img width="272" alt="3.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482043/6b3baf14-1ef2-6781-4b48-566dda718d69.png">

次に、上部にあるWindowタブからWindow→AI→NavigaitonでNavigationタブを出します。
<img width="684" alt="4.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482043/51e2590b-12c7-bec1-03f1-00ea804fbd31.png">
すると、新しくNavigationタブが出てきます。
あとは簡単です。Navigationタブの4つある項目のうちBakeというものを選択します。
そして、下部分にあるBakeというボタンを押すだけです。
すると、Planeに薄い青の四角形が出てきます。
![Bake.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482043/77b0e030-9d6e-b27c-669f-8bd24fe56a08.png)

この青い部分が移動できる範囲となります。
これでNavMeshの設定が終了しました。
では次に、実際に動かしてみる、前に・・・。
カメラを少しいじります。
わかりやすいように上から観察するようにしましょう。
HierarchyのMainCameraを選択して以下のTransform情報を記入してください。
<img width="276" alt="12.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482043/4ec2d32f-1e5e-e9f4-9d54-ef26471dc935.png">
こうすると上から観察しているような視点になります。

#2,Enemyを目的地まで移動させてみる

まず、動いてくれるEnemyを作ります。
先ほどPlaneを生成したときと同じ要領でCapsuleを生成します。
Hierarchy→3DObject→Capsuleで生成します。
わかりやすくするためにCapsuleの名前をEnemyに変えておきましょう。
Capsuleを選択してInspectorを表示します。Inspectorの上部にCapsuleと書いてある部分があるのでそこをEnemyに書き換えます。
<img width="278" alt="6.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482043/c390aef5-0f3e-d1d8-dbba-73054a5a7f8c.png">

・・・まだ少しわかりずらいですね。色も変えてあげましょう。
Projectというタブを選択してファイルのある部分で右クリックをし、Create→Materialと選択します。
<img width="542" alt="7.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482043/01ce713d-954d-7580-5d89-4f5759f1659d.png">

作ったマテリアル選択してInspectorからAlbedoという項目を探します。
その右側にある白い四角形をクリックして好きな色を選択してあげます。僕は赤を設定します。

色を変えることができたら作ったマテリアルを押しながらHierarchyにいるEnemyまでもっていきます。Enemyの部分に青い枠が出てきたら離してあげます。すると、Enemyの色が変化しているはずです。
![drag.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482043/70cfaf75-3707-6ec2-7b4d-6d75e341db29.png)
こんな感じに。
<img width="482" alt="9.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482043/cf799c7d-f3cf-4a26-1e6e-9a784352ae30.png">

次に、Enemyを選択してInspectorを開き、一番下にあるAdd Component（要素を追加する）を押します。
Navigationという項目を探し、その中にあるNavMeshAgentを押して追加します。
<img width="171" alt="10.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482043/1e83e011-eb30-46ca-2409-9caf1cadbce5.png">

すると、新しくNavMeshAgentが追加されます。
<img width="271" alt="11.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482043/ee2bc616-4b6a-6cb5-4213-2d627feb3104.png">

では次にスクリプトを記入します。
先ほどと同様にEnemyを選択してInspectorを開き、AddComponentからNewScriptを選択します。
名前はNavMeshTestにしてCreateAndAddを押します。
作ったスクリプトを開いたら以下のコードを記入します。
最初から記入されているものに対して追加してある部分はコメントでわかりやすくしています　　　　　　　　　　　　　　　　　。

```C#:NavMeshTest.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;                   //☆追加

public class NavMeshTest : MonoBehaviour
{
    public NavMeshAgent agent;          //☆追加
    public GameObject target;           //☆追加  目的地

    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        //目的地を設定してあげる
        agent.SetDestination(target.transform.position);//☆追加
    }
}

```

すると、EnemyについているNavMeshTestに以下の項目が新しく追加されます。
<img width="265" alt="キャプチャ.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482043/8d19a4c1-82e3-6dd3-19ed-deae9cb425d0.png">

では、このEnemyの移動先である目的地を作ります。
Create→3DObject→Cubeで四角形を出してあげてScaleをいじってあげます。Positionは床の中ならどこでも大丈夫です。（Yは0が好ましい・・・）
<img width="271" alt="キャプチャ.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482043/eeafabcd-31f3-6f3f-5c5f-338d6af6136b.png">

色が見にくいので先ほど作ったマテリアルでも適応させてあげましょう。
すると、このような感じになります。
<img width="482" alt="キャプチャ.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482043/142f44a3-650b-eba1-a38c-d7d591444095.png">

最後に、EnemyについているNavMeshTestのNoneとなっている場所にEnemyとCubeを入れてあげます。
矢印を参考に選択しながら入れてみてください。

![14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482043/4f7bdd34-8210-b584-8f8a-ef02d63a7803.png)

あとは再生ボタンを押すとEnemyが目的地となるCubeへ向かっていきます。

#終わり
細かく書きすぎてわかりづらくなってしまった部分もありますが、慣れてしまえば実装も簡単になります。
別の機会があったら今度は索敵してくれるEnemyを作っていきたい・・・です。