【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が使われましたよね?

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

【Unity】transformを使いこなす!座標・回転など自在に操作しよう!
更新日 : 2018年12月18日

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

リファレンスのページを読んで貰えばわかると思いますが、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は本当に多用される仕組みです。

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

LINEで送る
Pocket

ITエンジニアへ転職したい方におすすめ

自分を評価してくれる企業に転職して年収を上げたい! 自分のスキルにあった独自案件を知りたい!
エンジニアは今もっとも注目されている職業の1つ。エンジニアになって年収を増やしたい方や、あなたのスキルに見合った企業へ転職したいエンジニアの方も多いですよね。

しかし、大手の転職媒体は扱う求人数が多くても、誰もが登録しているので競争率もかなり高くなっています。そのため、あなたの条件に見合った企業を見つけても転職するためには、相応の努力とスキルが必要となります。

こういった媒体では、未経験からエンジニアを目指す方やエンジニア歴2〜3年で転職を考えている方にとって、最適な転職環境とはいえません。

そこでオススメしたいのが、未経験者や若手エンジニア向けの独自案件を多く掲載している「侍ワークス」です。

侍ワークスは、独自案件を多く掲載しているだけでなく、

・応募から就業まで一貫したサポート

・就業後もアフターフォロー

といった経験の浅い方や初めてエンジニアを目指す方にも安心のフォロー体制が整っています。もちろん登録は完全無料!しかも案件を見るだけなら登録も不要です。

まずは、お気軽にどんな求人があるか見てみてください。あなたにピッタリの企業がきっと見つかりますよ! 侍ワークスの求人情報を見る

書いた人

sato

sato

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