2012年09月28日

[Unity] ベルトコンベヤー上のオブジェクトの動きについて検証してみた(解決編)

前回の記事([Unity] ベルトコンベヤー上のオブジェクトの動きについて検証してみた)で

「適当にプレイヤーを用意して固定した床からベルトコンベヤーに乗ってみたら、
ベルトコンベヤーと一緒に動きはしたものの、乗った瞬間に瞬間移動してしまいました」

と最後に課題を挙げましたが、解決しました。
それもほんの数行の命令で済んだという素敵解決。

まずは、
・動かない床(手前)
・動く床(奥)
を用意します。

動く床に適用しているスクリプトは、前回と同様にこんな感じです。
function FixedUpdate() {
// x方向に揺れる
transform.localPosition.x = 3 * Mathf.Sin(Time.time);
}
次に、Standard Assetsにある「3rd Person Controller」を動かない床の上に配置します↓

20120928beltconbeyor001.png

InspectorとHierarchyウィンドウはこんな感じ↓

20120928beltconbeyor002.png

3rd Person Controllerオブジェクトに、独自に「Player_Controller.js」を追加しています。
Player_Controller.jsの中身が今回のポイントです。
Player_Controller.js
--------------------------------------------------
function OnControllerColliderHit(hit : ControllerColliderHit) {
if (hit.gameObject.name == "BeltConveyor") {
// ベルトコンベヤーに乗ったら
transform.parent = hit.gameObject.transform;
} else {
// ベルトコンベヤーじゃなかったら
transform.parent = null;
}
}
--------------------------------------------------
ここでは、

「キャラクターが動く床に触れたら、動く床の子階層に入れる」
「それ以外に触れたら親子関係を解消する」

という処理を行っています。
これで実行すると、、、

動く床に合わせて
20120928beltconbeyor003.png

キャラも移動してる!
20120928beltconbeyor004.png

とういことで、前回のような瞬間移動もなく
無事キャラクターがスムーズに動く床に合わせて動いてくれました。

Hierarchyウィンドウを確認してみると、ちゃんと動く床の階層下に入っていることがわかります↓

20120928beltconbeyor005.png

解決してよかった。
posted by be-style at 08:49| Comment(0) | Android
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: [必須入力]