Unity Vectorを一通り理解する

  • 10
    いいね
  • 0
    コメント

Unityが用意してくれているVectorをきちんと理解すれば開発も楽になるかなと思います。
リファレンスに載っているVectorを全部使って勉強します。
https://docs.unity3d.com/ja/current/ScriptReference/Vector3.html

Vector3概要

Vector3はクラスではなくStruct。UnityEngineネームスペースに存在している

コンストラクタ

全部で3つ
Vector3(float x, float y, float z)
=>普通にxyz変数に入れられる。

Vector3(float x, float y)
=>z変数には0fが入れられる。

定数

イプシロン

public const float kEpsilon = 1E-05f;

float比較のときに使用する。

プロパティ

normalizedプロパティ

ベクトルを正規化して返す。(ただしベクトル自体は変わらない)
get内でVector3.Normalize関数の演算結果を返している。

magnitudeプロパティ

ベクトルの長さ(ノルム)を返す。
get内でMathf.Sqrt(this.x * this.x + this.y * this.y + this.z * this.z);をやっているだけ。
処理負荷が高いのでなるべく使わない法が良い。

sqrMagnitudeプロパティ

magnitudeプロパティの平方根を求めないバージョン
少しでも処理負荷を下げようとして実装された。
単純に大きさの比較だけをやりたい時に使う。

zeroプロパティ

(0,0,0)のベクトルを返す。
get内でnew Vector3(0f, 0f, 0f);をやって新しいstructを使って返している。

one,foward,back,right,left,up,downプロパティ

zeroプロパティとほとんど同じ。xyz成分が違うだけ。

関数

Lerp(Vector3 a, Vector3 b, float t)

内部で
t = Mathf.Clamp01(t);をして01補正した後、2つのベクトルをleap処理して返す。
2つのベクトルの直線上を補完する。
12月-28-2016 18-49-32.gif

LerpUnclamped(Vector3 a, Vector3 b, float t)

Leap関数のtに対する01補正がないバージョン。

Slerp(Vector3 a, Vector3 b, float t)

球状に2つのベクトルが補完される点においてLeap関数と違う。
12月-28-2016 18-52-44.gif

SlerpUnclamped(Vector3 a, Vector3 b, float t)

Slerp関数のtの01補正がない関数

MoveTowards(Vector3 current, Vector3 target, float maxDistanceDelta)

currentからtargetに向かってcurrentを移動させる関数
currentとtargetの距離がmaxDistanceDelta以下ならtargetをそのまま返す。
maxDistanceDeltaを超えていたらcurrentからtarget方向に向かってmaxDisntaceDelta分進めたベクトルを返す。

Tips

Indexでxyzパラメータにアクセスできる

        Vector3 hoge = new Vector3(0, 1, 2);
        float x = hoge[0];
        float y = hoge[1];
        float z = hoge[2];

indexに0,1,2以外を入れるとエラーが起きるので注意。