【Unity】Vector3を完全攻略!加算・比較もできるって知ってた?

早速ですがUnityを触っている中で、でVector3を使ったことがありますか?

おそらくありますよね。

このVector3は非常に使用頻度が高いので、初心者でも「オブジェクトの移動や回転」あたりで使っているでしょう。

しかし説明通りに使っているだけで、完全に使いこなせている人は少ないのではないでしょうか。

自分もたまに「あれ、どうやるんだっけ?引数なんだっけ??」と調べることがよくあります。

今回は、初心者向けの以下のような内容から始めていきましょう。

・Vectorm3とは?
・基本的な使い方

後半は「Vector3.zero」を始めとした便利な関数や「Vector3同士の足し算比較」など少し細かい部分まで見ていきましょう。

全部を暗記する必要はありませんが、何ができるのかだけでも覚えておけると良いですね!

今回はそんなVector3についての話を一緒に見ていきましょう!

目次

Vector3とは?

まずはリファレンスを見てみましょうか。

Vector3

3D ベクトルと位置の表現

この構造体は Unity 全体の 3D での位置や方向のために使用されています。一般的なベクトル演算を行うための関数が含まれています。

参照元:https://docs.unity3d.com/ja/530/ScriptReference/Vector3.html

説明を読むと以下のことがわかりました。

①位置や方向のために使用される。
②一般的なベクトル演算を行うための関数が含まれている。

ひとつずつ見ていきましょう。

①位置や方向のために使用される。

これは今までUnityを触っていればなんとなく理解できるのではないでしょうか。

オブジェクトの移動や、回転でVector3が使われましたよね?

移動や回転をしたことがない人は以下のリンク先で確認してみてください。

②一般的なベクトル演算を行うための関数が含まれている。

リファレンスのページを読んで貰えばわかると思いますが、LerpNormalizeといったベクトルに関する関数が含まれています。

こちらに関しては、また後ほど見ていきましょう。

基本的な使い方

ではまず、Vector3の基本的な使い方を見てみましょう。

・newを使った作成方法
・値の取得方法
・値の変更方法

上記の3つさえ覚えておけば、まずは安心です。

newを使った作成方法

public class MyObject : MonoBehaviour {

    // Use this for initialization
    void Start () {

        // vector3を作成
        Vector3 v = new Vector3(1.0f,      // x
                                2.0f,      // y
                                3.0f);     // z
    }
}

newすることで、Vector3を作成できます。

その際、引数を与えることでVector3内部の「x,y,z変数」へ初期値を与えることができます。

また「x,y,z変数」はfloat型です。

※float型は、小数点まで含む数字を扱う変数の型です。

小数点まで含む数字も入れることができるので覚えておきましょう。

ちなみに数字の後ろについている「f」ですが、簡単に言ってしまうとfloat型の数字だという指定です。

初心者の人は、float型を扱う場合はつけるのを忘れないように気をつけましょう。

値の取得方法

public class MyObject : MonoBehaviour {

    // Use this for initialization
    void Start () {

        // vector3を作成
        Vector3 v = new Vector3(1.0f,      // x
                                2.0f,      // y
                                3.0f);     // z

        // コンソールへ出力
        Debug.Log ("x = " + v.x);
        Debug.Log ("y = " + v.y);
        Debug.Log ("z = " + v.z);
    }
}

「変数名.x」「変数名.y」「変数名.z」などといった形で変数を取得できます。

上記のプログラムは、作成したVector3から、各変数を取得して、コンソールへログ出力しています。

プログラムを実行すると、Unity上のコンソールへ以下のように出力されるでしょう。

unity-vector3-1

値の変更

「変数名.x」「変数名.y」「変数名.z」などといった変数へは、値を代入することができます。

public class MyObject : MonoBehaviour {

    // Use this for initialization
    void Start () {

        // vector3を作成
        Vector3 v = new Vector3(0.0f,0.0f,0.0f);

        // 変数の上書き
        v.x = 4.0f;
        v.y = 5.0f;
        v.z = 6.0f;

        // コンソールへ出力
        Debug.Log ("x = " + v.x);
        Debug.Log ("y = " + v.y);
        Debug.Log ("z = " + v.z);
    }
}

上記のプログラムでは、作成したVector3の「x,y,z変数」へ、値を上書き代入しています。

unity-vector3-2

出力結果もちゃんと書き換わっていますね!

その他便利な使い方

直接計算できる

実は、Vector3同士で計算することができます。

public class MyObject : MonoBehaviour {

    // Use this for initialization
    void Start () {

        // 作成
        Vector3 v1 = new Vector3(1.0f,0.0f,0.0f);
        Vector3 v2 = new Vector3(0.0f,0.0f,1.0f);

        // 加算
        Vector3 v3 = v1 + v2;

        // コンソールへ出力
        Debug.Log ("x = " + v3.x);
        Debug.Log ("y = " + v3.y);
        Debug.Log ("z = " + v3.z);
    }
}

上記のプログラムは、v1とv2を加算している例です。

結果は、両方の値が足されている以下のようになります。

unity-vector3-3

もちろん引き算や掛け算・割り算なども行えますので試してみてください。

比較演算子も使用できる

Vector3同士で比較することもできます。

public class MyObject : MonoBehaviour {

    // Use this for initialization
    void Start () {

        // 作成
        Vector3 v1 = new Vector3(1.0f,0.0f,0.0f);
        Vector3 v2 = new Vector3(1.0f,0.0f,0.0f);

        // 比較
        if (v1 == v2){
            Debug.Log ("v1 = v2");
        }
    }
}

上記のプログラムは、v1とv2が同じ値か比較しています。

実行結果は以下となります。

unity-vector3-4

今回は同一の値なので、ちゃんとログが表示されますね!

初期化関係の便利な関数たち

実はnewしなくても作成する方法はたくさんあります。

以下は、特定の数値で初期化されたVector3を作ることのできる関数です。

public class MyObject : MonoBehaviour {

    // Use this for initialization
    void Start () {
        // 様々な作成
        Vector3 v1 = Vector3.back;             // ( 0, 0,-1)
        Vector3 v2 = Vector3.down;             // ( 0,-1, 0)
        Vector3 v3 = Vector3.forward;          // ( 0, 0, 1)
        Vector3 v4 = Vector3.left;             // (-1, 0, 0)
        Vector3 v5 = Vector3.one;              // ( 1, 1, 1)
        Vector3 v6 = Vector3.right;            // ( 1, 0, 0)
        Vector3 v7 = Vector3.up;               // ( 0, 1, 0)
        Vector3 v8 = Vector3.zero;             // ( 0, 0, 0)
    }
}

特に使うことになるのは「Vector3.zero」や「Vector3.up」でしょうか。

よくサンプルプログラムでも出てきますので覚えておきましょう。

演算に使われる関数たち

Vector3には便利な演算を行ってくれる関数も用意されています。

先ほど少し話の出た「ベクトル演算を行うための関数」もここに含まれてきます。

本来ならば今回説明を行いたいところですが、長くなってしまうので別記事に分けて後日説明を載せておきますね!

少々お待ちください。

まとめ

今回は、Vector3について見ていきました。

そんなに難しい内容ではなかったかと思います。

結論だけ言ってしまえば「X,Y,Z」の値をまとめてくれている構造体で、座標や回転、ベクトルによく使われる、といえるでしょうか。

Vector3は本当に多用される仕組みです。

ぜひここで学んで、サンプルプログラムで多用されていても困らないようにしましょう。

この記事を書いた人

学生時代を含めると、かれこれ10年以上プログラマーとして過ごしています。
様々な言語や環境、プロジェクトに関わってきましたので、より実践的な記事をみなさんにお届きるよう情報発信していきます!

目次