NavMeshとは
経路を探索してくれるAIみたいなもの。移動する順番を指定したり、障害物を避けてくれたりする。
めっちゃ簡単。
工夫次第でいかにも敵に意思があるように作れる。
使い方
大きく分けて以下の2つ。
- エリアに対してNavMeshをBakeする。
- 移動させたいもの(ここではキャラクター)に対してNav Mesh Agentをアタッチする。
- 移動に関するスクリプトを書き、キャラクターにアタッチする。
1.エリアに対してNavMeshをBakeする
エリアは既にあるものと仮定する。
メニューからWindow -> Navigationをクリック。
Navigationタブが表示されるので下のBakeをクリック。
するとエリアに青い面が現れる。これが移動ルートになる。
移動ルートは自動で生成してくれるが、上のBakeをクリックすると詳細設定画面になるので、そこで調整できる。
2.キャラクターに対してNavMesh Agentをアタッチする。
キャラクターをクリックし、Add ComponentでNav 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;
}
}
ハマリポイント
- エリアのオブジェクトをstaticにしておかないと動かない。(Inspectorビュー上のチェックボックス)
- キャラクターにRigitBodyがついてると目に見えない何かに衝突してしまう。