コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【Unity】Transform型の位置や回転角、サイズの設定を楽にする

はじめに

using UnityEngine;

public class MyBehaviourScript : MonoBehaviour
{
    private void Start()
    {
        // エラー
        transform.position.x = 0;

        // OK
        var pos = transform.position;
        pos.x = 0;
        transform.position = pos;

        // OK
        transform.position = new Vector3(
            0, 
            transform.position.y, 
            transform.position.z);
    }
}

Unityでゲームオブジェクトの位置を設定する場合は
transformのpositionやlocalPositionを使用しますが
C#の関係上、一度変数に代入するかnew構文を使用する必要があります

この問題は、C#の拡張メソッドを使用して下記のようなクラスを作成すると回避できます

ソースコード

使い方

using UnityEngine;

public class MyBehaviourScript : MonoBehaviour
{
    private void Start()
    {
        // 位置を設定します
        transform.SetPositionX(0);
        transform.SetPositionY(0);
        transform.SetPositionZ(0);

        // 位置を加算します
        transform.AddPositionX(0);
        transform.AddPositionY(0);
        transform.AddPositionZ(0);

        // ローカル座標系で位置を設定します
        transform.SetLocalPositionX(0);
        transform.SetLocalPositionY(0);
        transform.SetLocalPositionZ(0);

        // ローカル座標系で位置を加算します
        transform.AddLocalPositionX(0);
        transform.AddLocalPositionY(0);
        transform.AddLocalPositionZ(0);

        // 回転角を設定します
        transform.SetEulerAngleX(0);
        transform.SetEulerAngleY(0);
        transform.SetEulerAngleZ(0);

        // 回転角を加算します
        transform.AddEulerAngleX(0);
        transform.AddEulerAngleY(0);
        transform.AddEulerAngleZ(0);

        // ローカル座標系で回転角を設定します
        transform.SetLocalEulerAngleX(0);
        transform.SetLocalEulerAngleY(0);
        transform.SetLocalEulerAngleZ(0);

        // ローカル座標系で回転角を加算します
        transform.AddLocalEulerAngleX(0);
        transform.AddLocalEulerAngleY(0);
        transform.AddLocalEulerAngleZ(0);

        // ローカル座標系でスケーリング値を設定します
        transform.SetLocalScaleX(0);
        transform.SetLocalScaleY(0);
        transform.SetLocalScaleZ(0);

        // ローカル座標系でスケーリング値を加算します
        transform.AddLocalScaleX(0);
        transform.AddLocalScaleY(0);
        transform.AddLocalScaleZ(0);
    }
}

関連記事