この記事でのバージョン
Unity 5.4.0f3
はじめに
TransformはInspectorの歯車から、Resetを実行することで
- positionを(0,0,0)
- rotationを(0,0,0)
- scaleを(1,1,1)
にリセットする事ができます。
これ自体はとても便利なのですが、transform.Reset()のような形で
プログラムから実行出来るわけではありません。
なので今回はResetという拡張メソッド を作ろうという記事です。
なお、このInspectorに表示されているResetというメソッド、
コンポーネントを追加した際に処理をしたい場合にも使えるのですが、
それはまた別のお話。
TransformExtension
早速コードです。
using UnityEngine; /// <summary> /// Transformの拡張クラス /// </summary> public static class TransformExtension{ //================================================================================= //初期化 //================================================================================= /// <summary> /// position、rotation、scaleをリセットする /// </summary> public static void Reset(this Transform transform, bool isLocal = false) { if(isLocal){ transform.localPosition = Vector3.zero; transform.localRotation = Quaternion.identity; transform.localScale = Vector3.one; } else{ transform.position = Vector3.zero; transform.rotation = Quaternion.identity; transform.localScale = new Vector3( transform.localScale.x / transform.lossyScale.x, transform.localScale.y / transform.lossyScale.y, transform.localScale.z / transform.lossyScale.z ); } } }
上記のTransformExtension.csを作成すると、
どのTransformでもResetを実行できるようになります。
また、引数のisLocalでローカル座標でリセットするか否かを設定できます。
//ワールド座標上でposition、rotation、scaleをリセット transform.Reset(); //ローカル座標上でposition、rotation、scaleをリセット transform.Reset(isLocal:true);
おわりに
ちょっとした事ですが、
扱う機会が多いTransform周りは拡張するとかなり楽に事が多いですね。