4
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Unity Vector3の便利な変数と関数

Posted at

0.0 はじめに

Vector3の便利な関数と変数があります。よく使われるものをまとめました。

1.0 パラメータが(0,0,0)、(1,1,1)用のベクトル変数

static(スタティック)な変数なのでVector3.xxxxで使用できます。

C# Test.cs
Vector3 vOne = Vector3.one; // ( 1, 1, 1)ベクトル
Vector3 vZero = Vector3.zero; // ( 0, 0, 0)ベクトル

2.0 上下左右前後の6方向ベクトルを表す変数

同様にstatic(スタティック)な変数なのでVector3.xxxxで使用できます。

C# Test.cs
Vector3 vB = Vector3.back; // ( 0, 0,-1) 後方向
Vector3 vD = Vector3.down; // ( 0,-1, 0) 下方向
Vector3 vF = Vector3.forward; // ( 0, 0, 1) 前方向
Vector3 vL = Vector3.left; // (-1, 0, 0) 左方向
Vector3 vR = Vector3.right; // ( 1, 0, 0) 右方向
Vector3 vU = Vector3.up; // ( 0, 1, 0) 上方向

3.0 ベクトルの大きさにかかわる変数magnitudeとsqrMagnitude

大きさにかかわる変数です。Vector3.magnitudeを使うとベクトルの大きさをfloatで返してくれます。
尚、magnitudeは平方根の計算をするので比較的重い処理です。単純にベクトル大きさを比較する場合には平方根の計算をしないVector3.sqrMagnitudeを使用しましょう。

C# Test.cs
Vector3 v = new Vector3(5, 0, 1);
float vMag = v.magnitude; // 5.09902 大きさ
float vSMag = v.sqrMagnitude; // 26 大きさの2乗

Vector3 vNor = v.normalized; // (1.0, 0.0, 0.2) 1の大きさ

4.0 ベクトルの回転を扱うQuaternion

Quaternion.Euler(x, y, z)を使ってVector3の回転ができます。回転させたい量(角度)をrotationにかけてあげます。
尚、回転では反時計回りが正の方向となります。

C# Test.cs
// z軸で45度だけ反時計回りさせています。
transform.rotation *= Quaternion.Euler(0, 0, 45f);

5.0 線形補完Lerp

オブジェクトを滑らかに移動させるためによく使うLerpは2点間にある任意の点を表現できる線形補完を行う関数です。
始まりの点Vector3 aからbまでの間の点を0から1の間の割合tで補完します。例えば0は点a、1は点b、0.5はa点とb点のちょうど真ん中を示します。
Vector3.Lerp(a, b, t)の形で使用します。

C# Test.cs
// fromから、fromからTo間の長さの4割(0.4f)の地点へ移動する
transform.position = Vector3.Lerp(from, to, 0.4f);

6.0 球面線形補間Slerp

Lerpと同じ補完を行いますがこちらは円を描くように補完します。
引数も同じくaからbまでの間の点を0から1の間の割合tで補完、Vector3.Slerp(a, b, t)の形で使用します。

C# Test.cs
// fromから、fromからTo間の長さの6割(0.6f)の地点へ球面線形移動する
transform.position = Vector3.Slerp(from, to, 0.6f);

7.0 移動時に使用するMoveTowards

Lerpと同じく線形補完ですが、MoveTowardsは出発の地点currentから目的地targetに向けての距離を設定することができます。尚、距離は目的地を超えることはありません。

C# Test.cs
// 下記をUpdate関数などに入れると時間とともに移動する
Vector3 current = Vector3.zero; //現在地
Vector3 target = Vector3.one*10; //目的地
float dist = Time.time; //現在地からの距離

// fromからToに向けての長さdistの地点へ移動する
transform.position = Vector3.MoveTowards(current, target, dist);

8.0 回転移動RotateTowards

現在地から目標値まで回転します。
maxRadiansDeltaの値で回転速度の調整ができます。
maxRadiansDeltaにマイナスの値を与えると逆方向に回転します。

C# Test.cs
// 下記をUpdate関数などに入れると時間とともに回転する(上から右に回転)
Vector3 current = Vector3.up;//現在地
Vector3 target = Vector3.right;//目標値

float maxRadiansDelta = Time.time;//2点間におけるラジアンの差分の範囲内で設定する
float maxMagnitudeDelta = 0f;//1回で何度回転させるか。

transform.position = Vector3.RotateTowards(current, target, maxRadiansDelta, maxMagnitudeDelta);

9.0 距離 Distance

ベクトルab間の距離を取得出来ます。(a-b).magnitudeと同じ結果となります。

C# Test.cs
Vector3 a = new Vector3(1, 1, 1);
Vector3 b = new Vector3(4, 5, 1);
float dist = Vector3.Distance(a, b); // dist = 5
4
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?