2012年02月26日

[Unity] Off Mesh Link を試してみた

[Unity] Unity3.5新機能 Nav Mesh を試してみた の続きです。
※Nav Mesh は Pro専用の機能です

ステージ内で通常移動では越えられない段差があるとき、Off Mesh Link を用意することで
段差を上ることができます。

Unity3.5 public betaのサンプル の「NavMesh Demo」にもありますが、
必要最低限だけを用意してみました。

まずは、ステージに追加の床とハシゴ(ladder)に見立てたオブジェクトを用意します(中央赤枠)。
ハシゴの子オブジェクトとして、着地点/頂上点には空のオブジェクト(bottom,top)を用意します(左下赤枠)。
前回作っておいたモブはプレファブ化しておきます(左上赤枠、右上赤枠)。

201202026navmesh01.png

ハシゴの子オブジェクト bottom の空オブジェクト位置はこんな感じ↓

201202026navmesh05.png

ハシゴの子オブジェクト top の空オブジェクト位置はこんな感じ↓

201202026navmesh06.png

※モブに適用しているプログラムには一部修正を加えています↓
------------------------------------------
// 【参考】 http://www.unitygames.jp/game/ug2774551
// ↓ 参考元はC# これを JS 向けに修正
// このスクリプトはNavMeshAgentが適用されたモブ(「その他大勢」という意味)に適用される

// スタート/ゴール地点
var start : Transform;
var goal : Transform;
// プレファブ用
var mobPrefab : GameObject;

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

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

function Update() {
// 目的地までの距離
if (navMeshAgent.remainingDistance < 0.5f) {
// スタート位置に戻る ※この方法だと、2周目に最短距離を選択してくれない!
// transform.position = start.position;
// スタート位置にインスタンスを生成
Instantiate(mobPrefab, start.position, Quaternion.identity);
// 自分自身を削除
Destroy(gameObject);
}
}
------------------------------------------
次に、ハシゴ(ladder)オブジェクトにOff Mesh Linkコンポーネントを適用します↓

201202026navmesh02.png

Off Mesh Link コンポーネントの「Start」「End」パラメータに、
ハシゴ(ladder)の子オブジェクトで作っておいた start/end オブジェクトを適用します↓
※下から上に上るということで、start = bottom、end = top としています

201202026navmesh04.png

その後、前回のベイクをクリアしてから再度ベイクすると、ハシゴ(ladder)の位置に経路ができている
ことがわかります↓

201202026navmesh03.png

ハシゴ(ladder)を通る経路が最短経路となるため、2周目からはモブは必ずハシゴ(ladder)を通るようになります。

実際の動作は、こちら で確認することができます。
タグ:UNITY OffMeshLink
posted by be-style at 18:13| Comment(0) | Unity
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: [必須入力]