掃盲系列 : Vector 矢量

https://docs.unity3d.com/ScriptReference/Vector3.html

用作空間記錄時

Vector2 由 2 個 float 組成可以看待為 X, Y 軸.
Vector3 由 3 個 float 組成可以看待為 X, Y, Z 軸.

用作方向記錄時

Vector2 假定由 X=0f, Y= 0f 的位置畫一條直線到坐標.
e.g. { 1, 0 } 就是由 { 0,0 } 連接到 {1, 0} 水平於 X 軸且距離為 1 的橫線.

Vector3 假定由 X=0f, Y=0f, Z=0f 的位置畫一條直線到坐標.
e.g. { 0, 1, 0 } 就是由 {0,0,0} 垂直於 Y 軸且距離為 1 的直線.

取得 Vector 的距離

在 Unity3D 中有 API 取得一支 Vector 的距離.

一般的應用例子 – [方向, 速度]

這個距離也可以與時間一起運算並取得該方向之速度等使用.

  • 上一幀的 GameObject 位置 跟 角度
  • 現在的 GameObject 位置 跟 角度
  • 每次 Update() 系統給的 Time.deltaTime

有幀與幀之間的點就可以進行 vector 運算得到矢量 及其距離, 並以之得到這幀的速度…etc

Vector3 lastFramePosition;

void LateUpdate()
{
    lastFramePosition = transform.position;
}

void Update()
{
    float time = Time.deltaTime;
    Vector3 v = transform.position - lastFramePosition;
    float distance = v.magnitude; // to calculate the distance we moved.
    
    float speed = distance / time;
}

距離, 時間, 速度的關係.

一般的應用例子 – [角度]

角度的 API 運算.

經由 Transfrom.forward 其實可以很輕易的算到兩個矢量之間的角度,
留意的是這部分不包括距離的資源.

以上就是一般的懶人包, 其他的小弟比較懶有人問才再補完….. 還是那句看 document 長智識.

2 Comments

  1. Pingback: 我的人形控制開發筆記(一) Locomotion – Clonefactor

  2. Pingback: 便當級的怪物 Locomotion + NavMeshAgent – Clonefactor

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

*

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料