今回はスタンダードアセットのUtilityにあるObjectResetterを使ってみようと思います。
ObjectResetterは、ゲームオブジェクトのゲーム開始時の位置と角度に戻す為の処理が記述されています。
ObjectResetterを取り付けるだけでは処理を実行出来ないので、ObjectResetterのメソッドを使用する別のスクリプトを作成して使用します。
ObjectResetterの取り付け
ObjectResetterはAssets→StandardAssets→Utilityにあります。
今回は、ヒエラルキー上にCubeを取り付け、これにObjectResetterと操作するOperateObjectResetterを自作し取り付けます。
ObjectResetterは空のゲームオブジェクトでブログ記事用にサンプルを分ける為だけに使用しているので、特にCubeの親にする必要はありません。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | using UnityEngine; using System.Collections; using UnityStandardAssets.Utility; public class OperateObjectResetter : MonoBehaviour { private ObjectResetter objectR; // Use this for initialization void Start () { objectR = GetComponent<ObjectResetter> (); } // Update is called once per frame void Update () { // マウスの左ボタンを押したら5秒後にゲームオブジェクトの位置をリセット if (Input.GetButtonDown ("Fire1")) { objectR.DelayedReset (5f); Debug.Log ("Reset"); } } // ObjectResetterでSendMessageされてるので一応受け取りメソッドを用意 public void Reset() { Debug.Log ("リセットしました"); } } |
マウスの左ボタンを押したらObjectResetterのDelayedResetに5fを渡し実行します。
DelayedResetは指定した秒数が経過したら元の位置と角度にリセットする処理です。
DelayedResetの処理が終わるとSendMessageでResetメソッドを呼び出す処理があるので、呼び出した側でResetメソッドを実装しておきます。
ないとエラーが出るので用意しただけで、特別な処理を実行していません。
また位置と角度の変更を自動で行う為のMoveスクリプトも自作し取り付けます。
1 2 3 4 5 6 7 8 9 10 11 12 13 | using UnityEngine; using System.Collections; public class Move : MonoBehaviour { // Update is called once per frame void Update () { transform.position =new Vector3(transform.position.x + 1f * Time.deltaTime, transform.position.y, transform.position.z); transform.Rotate (Vector3.one * 10f * Time.deltaTime); } } |
位置をX軸に1秒間に1m移動させ、角度は1秒毎に各軸で10度ずつ回転させています。
スクリプトを取り付けたCubeは
↑のようになります。
ObjectResetterはゲームの途中で、追加したゲームオブジェクトを監視し、リセットされた時にそのゲームオブジェクトの親要素の解除を行いその場に放置します。(^.^)/~~~
そこら辺も合わせて確認してみましょう。
↑のようにマウスの左ボタンを押すと、元の位置と角度に戻りますが、途中から追加したゲームオブジェクトはCubeとの親子関係を解除し、その場に放たれています。
今回はOperateObjectResetterでマウスの左ボタンを押した時に元に戻していますが、ゲームオブジェクトがある位置に来た時に元に戻すといった処理に変える事も出来ます。