▶
【Unity】3Dアクションゲームを作ろう!#7 ステージの作成(Skybox・落下判定)
▶
【Unity】3Dアクションゲームを作ろう!#8 ステージの作成(スイッチ・扉)
▶
【Unity】3Dアクションゲームを作ろう!#9 プレイヤーのHP管理
▶
【初心者Unity】JsonUtilityクラスでJSONを扱う方法
▶
【初心者Unity】スクリプトからコンポーネントを追加する方法
UnityのVector3でよく使うものまとめ
UnityのVector3構造体について、よく使う箇所をメモっておきます。
[Unity_317×90]
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次元ベクトル } }
以上です。
▶
【Unity】3Dアクションゲームを作ろう!#7 ステージの作成(Skybox・落下判定)
▶
【Unity】3Dアクションゲームを作ろう!#8 ステージの作成(スイッチ・扉)
▶
【Unity】3Dアクションゲームを作ろう!#9 プレイヤーのHP管理
▶
【初心者Unity】JsonUtilityクラスでJSONを扱う方法
▶
【初心者Unity】スクリプトからコンポーネントを追加する方法
ゲーム制作関連のオススメ連載リンク
とっても手軽なゲーム制作体験!
Unityゲーム開発基礎
実際のリリースゲームを題材にしたハンズオンゲーム制作連載
実践unityゲーム開発