敵キャラとかを自動的に動かす NavMesh

More than 1 year has passed since last update.


NavMeshとは

経路を探索してくれるAIみたいなもの。移動する順番を指定したり、障害物を避けてくれたりする。

めっちゃ簡単。

工夫次第でいかにも敵に意思があるように作れる。


使い方

大きく分けて以下の2つ。

1. エリアに対してNavMeshをBakeする。

2. 移動させたいもの(ここではキャラクター)に対してNav Mesh Agentをアタッチする。

3. 移動に関するスクリプトを書き、キャラクターにアタッチする。


1.エリアに対してNavMeshをBakeする

エリアは既にあるものと仮定する。

メニューからWindow -> Navigationをクリック。

Navigationタブが表示されるので下のBakeをクリック。

するとエリアに青い面が現れる。これが移動ルートになる。

移動ルートは自動で生成してくれるが、上のBakeをクリックすると詳細設定画面になるので、そこで調整できる。


2.キャラクターに対してNavMesh Agentをアタッチする。

キャラクターをクリックし、Add ComponentNav Mesh Agentをクリック。


3. 移動に関するスクリプトを書き、キャラクターにアタッチする。

スクリプトを作成し、移動させたい対象にアタッチする。

単純にある対象(ここではtarget)に向かっていくスクリプトを以下に書きます。


Move

public class Move : MonoBehaviour {

public GameObject target;

void Start () {
NavMeshAgent agent = GetComponent<NavMeshAgent> ();
agent.speed = 1;//このようにスクリプトからNavMeshのプロパティをいじれる。
agent.destination = target.transform.position;
}
}



ハマリポイント


  1. エリアのオブジェクトをstaticにしておかないと動かない。(Inspectorビュー上のチェックボックス)

  2. キャラクターにRigitBodyがついてると目に見えない何かに衝突してしまう。