読者です 読者をやめる 読者になる 読者になる

(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

Transformを簡単にResetする【Unity】【拡張メソッド】


このエントリーをはてなブックマークに追加


この記事でのバージョン
Unity 5.4.0f3

はじめに

TransformはInspectorの歯車から、Resetを実行することで

  • positionを(0,0,0)
  • rotationを(0,0,0)
  • scaleを(1,1,1)

にリセットする事ができます。


f:id:kan_kikuchi:20160930134353p:plain


これ自体はとても便利なのですが、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周りは拡張するとかなり楽に事が多いですね。