2012年02月24日

[Unity] Unity3.5新機能 Nav Mesh を試してみた

Unity3.5の新機能「Nav Mesh(Pro専用)」を試してみました。

参考元
http://www.unitygames.jp/game/ug2774551

参考元ではC#で実装していますが、JSで実装してみました。
手順は以下の通りです。

ステージを作成します。
ステージで使用するゲームオブジェクトには「static」が適用されている必要があります↓

201202029navmesh01.png

ただ、これだとすべてのstatic要素が適用されてしまうので、
それが嫌だという場合は「Navigation Static」のみを適用することもできます↓

201202029navmesh02.png

ステージが出来たところで、Navigationウィンドウを表示します↓

201202024navimesh01.png

Navigationウィンドウの中でパラメーターを変更して[Bake]ボタンを押すと、
画面右のように、経路が水色で表示されます↓

201202024navimesh02.png

ステージの設定は以上です。
次に、スタート地点(空オブジェクト)と、ゴール地点(シリンダ)を用意します↓

201202024navimesh03.png

スタート地点からゴールまで移動するモブ(「その他大勢」という意味)を用意します。
このモブは、

・親 = 空オブジェクト ← Nav Mesh Agent コンポーネント、スクリプトを適用
・子 = キューブ

としています。
キューブにNavMeshAgentを適用すると、ステージに埋もれてしまったので
このような親子関係になっています。

スクリプトの入力パラメーター(start, goal)に、プロジェクトウィンドウからスタートとゴール
オブジェクトをドラッグして適用してます。

201202024navimesh05.png

Nav Mesh Agent コンポーネントを適用するときのメニュー画面↓

201202024navimesh04.png

モブに適用したスクリプト(Mob_Controller.js)は、以下の通りです。
---------------------------------------------
// 【参考】 http://www.unitygames.jp/game/ug2774551
// ↓ 参考元はC# これを JS 向けに修正
// このスクリプトはNavMeshAgentが適用されたモブ(「その他大勢」という意味)に適用される

// ゴール地点
var start : Transform;
var goal : Transform;

// NavMeshAgentコンポーネントを参照するための変数
private var navMeshAgent : NavMeshAgent;

function Start () {
// NavMeshAgentコンポーネントを取得
navMeshAgent = GetComponent(NavMeshAgent);
// 目的地を設定
navMeshAgent.SetDestination(goal.position);
}

function Update() {
// 目的地までの距離
if (navMeshAgent.remainingDistance < 0.5f) {
// スタート位置に戻る
transform.position = start.position;
}
}
---------------------------------------------

実際に動いている様子は こちら で確認できます。

経路探索がこんなに簡単に実装できるなんて、素敵すぎるなー。
posted by be-style at 09:33| Comment(0) | Unity
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: [必須入力]