UnityのVector3でよく使うものまとめ

この記事は2016年2月16日に書かれたものです。内容が古い可能性がありますのでご注意ください。


UnityのVector3でよく使うものまとめ


UnityのVector3構造体について、よく使う箇所をメモっておきます。

Vector3


Vector3は、UnityEngineに含まれている構造体です。
Unity全体の3Dでの座標や方向を表すために使用されます。
Vector3はベクトルです。値には向きと大きさがあります。

コンストラクタ


x, y, z成分の値から、3次元ベクトルを作成します。

public class Sample1 : MonoBehaviour {

    float x = 1;
    float y = 1;
    float z = 1;

    void Start() {
        Vector3 v = new Vector3(x, y, z);
    }
}

 

Static 変数


上下左右前後の6方向と、全成分1と0のベクトルは、コンストラクタを使わずにStatic変数で作成できます。

public class Sample2 : MonoBehaviour {

    Vector3 v1 = Vector3.one;     // Vector3(1, 1, 1) と同じ意味
    Vector3 v2 = Vector3.zero;    // Vector3(0, 0, 0)
    Vector3 v3 = Vector3.up;      // Vector3(0, 1, 0)
    Vector3 v4 = Vector3.down;    // Vector3(0, -1, 0)
    Vector3 v5 = Vector3.right;   // Vector3(1, 0, 0)
    Vector3 v6 = Vector3.left;    // Vector3(-1, 0, 0)
    Vector3 v7 = Vector3.forward; // Vector3(0, 0, 1)
    Vector3 v8 = Vector3.back;    // Vector3(0, 0, -1)
}

 

Vector3.magnitude


ベクトルの長さを返します。返り値はfloat型になります。
速度や3次元座標はベクトルのため、そのままでは数値と比較することはできません。
Vector3型の変数から長さを取得したい場合、以下のように記述します。

public class Sample3 : MonoBehaviour {

    void Start() {
        Vector3 pos = new Vector3(x, y, z);
        float length = pos.magnitude;  // length は(x^2 + y^2 + z^2)の平方根となります。
    }
}

Rigidbodyクラスのvelocity(速度)は、Vector3型です。
速さを取得したい場合は以下のように記述します。

public class Sample4 : MonoBehaviour {

 public Rigidbody rb;

 void Start() {
     float speed = rb.velocity.magnitude;
 }

 

Vector3.sqrMagnitude


ベクトルの2乗の長さを返します。返り値はfloat型になります。
平方根の計算は複雑であるため、処理に時間がかりCPUへの負荷が高くなります。
長さを比較したい場合などには、sqrMagnitudeで取得したベクトルの2乗の長さと、
比較したい長さを2乗して比べるほうが動作は軽くなります。

public class Sample5 : MonoBehaviour {

    public float distance = 5.0f;
    void Start() {
        Vector3 pos = new Vector3(3, 4, 5);
        float sqrLength = pos.sqrMagnitude;
        if(sqrLength < distance * distance){
            Debug.Log("原点からposまでの長さは、Distanceよりも短いです")
        }
    }
}

 

Vector3.normalized


正規化です。
magnitude(長さ)を1としたベクトル(単位ベクトル)を返します。返り値はVector3型です。
現在のベクトルの方向を維持したまま、長さが1のベクトルを作成したい場合に使用します。
※ベクトルが小さすぎる場合、正規化されたベクトルは0ベクトルとなる点に注意が必要です。

public class Sample6 : MonoBehaviour {

    void Start() {
        Vector3 pos = new Vector3(3, 4, 5);
        Vector3 nlz = pos.normalized;        // nlzは、posと同じ向きで長さが1の3次元ベクトル
    }
}

以上です。

今月の新着記事

【ついにキタ!】Unity2018.1を日本語化する方法

記事一覧にもどる

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

PAGE TOP