スポンサーリンク

【Unity】Vector3の値を簡単に1軸だけ変更する方法

c#

Vector3の値を変更する方法

//エラーとなる
this.transform.position.x = 10.0f; 

//エラーとならない
this.transform.position = new Vector3(10.0f,this.transform.position.y,this.transform.position.z);

//エラーとならない
Vector3 pos = this.transform.position;
pos.x = 10.0f;
this.transform.position = pos;

Vector3を使っていて、X,Y,Z軸それぞれの値だけ変えたいという時があると思います。それぞれの数値を変えたい時、(x = 10.0f)のように入れることはできず、少し長めのコードを描く必要があります。

そこで、出来るだけ短く直感的に数値を入れられる方法を今回は紹介していきます。

拡張メソッド

拡張メソッドとは、すでにあるクラスにメソッド(関数)を追加したときのメソッドのことを言います。
※厳密には、直接メソッドを追加するわけではなく、あたかも初めから実装されているかのように、見せかけているだけです。

Vector3を拡張する

public static class TransfromExpansion
    {
        static Vector3 vec;
        
        //Xをセットする
        public static void SetX(this Transform transform,float x)
        {
            vec.Set(x, transform.position.y, transform.position.z);
            transform.position = vec;
        }
        //Yをセットする
        public static void SetY(this Transform transform, float y)
        {
            vec.Set(transform.position.x, y, transform.position.z);
            transform.position = vec;
        }
        //Zをセットする
        public static void SetZ(this Transform transform, float z)
        {
            vec.Set(transform.position.x, transform.position.y, z);
            transform.position = vec;
        }
    }

まずは、新しくVector3を拡張するためのクラスを作成します。

X,Y,Zそれぞれの値を変えられるように、3つの関数を作成しました!

これだけで、Vector3の拡張は完了です!

transform.postion.SetX(10.0f); //エラーとならない

あとは、値を変更したいところで、拡張メソッドを呼び出して使うことが出来ます。

同様の方法で、Vector2なども、拡張可能なので、合わせて実装しておくといいかもしれません!

お疲れさまでした!

タイトルとURLをコピーしました