【Unity】動く床に乗った時、キャラクターも一緒に移動するようにする方法
2016年11月06日

【Unity】動く床に乗った時、キャラクターも一緒に移動するようにする方法

先日動く床を作成しましたが、そのままではキャラクターが乗った時に床だけ移動してキャラクターは床から落ちてしまいました。

【Unity】複数の目的地を通って動く床を作ってみた

今回はその解決方法を書いておこうと思います。

解決方法はとても簡単で、動く床に乗った時にキャラクターを動いている床の子オブジェクトにすれば良いのです。

スクリプトを書く前にまずはヒエラルキーから動く床のオブジェクトmFloorを選択し、Tagの横のUndefinedとなっているところを開きAdd Tagをクリックします。

オブジェクトにタグを加える。

するとインスペクターがタグを追加出来る画面に変わります。
Tagsのところにある+をクリックし、出てきたボックスにMoveFloorと入力します。

MoveFloorというタグを加える。

そしたらまたヒエラルキーからmFloorを選択し、TagをMoveFloorに変更します。

オブジェクトのタグを選択する

あとはキャラクターがこのMoveFloorのタグが付いた床に乗った時にその子オブジェクトになるようなスクリプトを書けばOKです!

function OnControllerColliderHit(hit : ControllerColliderHit) {
	if (hit.gameObject.tag == "MoveFloor") {
		transform.parent = hit.gameObject.transform;
	} else {
		transform.parent = null;
	}
}

言語はJavascriptです。
このスクリプトをキャラクターを動かしているスクリプトに書き加えるか新しくスクリプトのファイルを作成して書いてキャラクターにアタッチすれば動く床と一緒にキャラクターも移動するはずです。

このスクリプトはキャラクターコントローラーを使用していることを前提に書いていますが、状況に応じてOnCollisionEnterやOnTriggerEnter等を使えば良いと思います。

試しに動かしてみます。

オブジェクトにタグを加える。

ちゃんと動く床と一緒に移動していますね!

ヒエラルキーのキャラクターの動きにも注目してください。
今回使っているキャラクターは名前をSpartaにしてあります。
動く床に乗るとSpartaがmFloorの子オブジェクトになり、床から降りるとその親子関係が解消されているのが分かりますね!

ただこのスクリプトも気になる程ではないかもしれませんが問題点があって、動く床から降りる際に別の動かない床などに触れるまでは動く床の子オブジェクトのままなので、それまでは動く床の動きに合わせてキャラクターも動いてしまうのです。

これはOnControllerColliderHitを使って全部処理しているからなので、キャラクターの足元にキャラクターコントローラーから下に少しはみ出るくらいの位置にトリガーを配置してスクリプトの最後のelseを消して下記のようにすれば解決します。

オブジェクトにタグを加える。
function OnControllerColliderHit(hit : ControllerColliderHit) {
	if (hit.gameObject.tag == "MoveFloor") {
		transform.parent = hit.gameObject.transform;
	} 
}

function OnTriggerExit(){
	transform.parent = null;
}

これで動く床から離れた瞬間に親子関係が解消されるので、ジャンプすると床だけ目的地に移動します。

どちらが良いかはその時の状況や好みで使えば良いと思います。

スポンサードリンク
タグ:JavaScript UNITY
posted by ナオ at 17:49 | Comment(0) | Unityの使い方メモ
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: [必須入力]