close
在遊戲中,很多時候都需要知道物件與目標之間的距離,例如施放範圍技能時,需要依照距離來判定傷害等等。
在 Unity 裡,有內建的方法可以幫助我們取得座標點的距離長度
// 取得座標點的距離長度 Vector2.magnitude; Vector3.magnitude; // 取得兩點座標之間的距離長度 Vector2.Distance( A, B ); Vector3.Distance( A, B );
magnitude 的就是 ((x * x) + (y * y)) 再開根號。
這邊針對 magnitude 做說明,說明為何 magnitude 這算法是用來算該座標位置的距離長度的:
Vector2 v2 = new Vector2(1.0f, 0.0f); // 使用 v2.magnitude 取得距離長度, // distance 結果為 1 float distance = v2.magnitude;
大家都知道兩點座標求距離的公式,公式如下
大家可以假設 A 點為 (1, 1),B 點為 (0, 0)
套入公式後為 (((1 * 1) - (0 * 0)) + ((1 * 1) - (0 * 0))) 再開根號
大家可以看到 0 * 0 其實是沒意義的,所以可以簡化成 ((1 * 1) + (1 * 1)) 再開根號
這算法是否跟 Vector2.magnitude 一樣呢?((x * x) + (y * y)) 再開根號!
Vector3.magnitude 也一樣,只是多了一個 Z,((x * x) + (y * y) + (z * z)) 再開根號。
假設我們有兩個座標位置,分別為 pos1、pos2
Vector2 pos1 = new Vector2( 10.0f, 15.0f ); Vector2 pos2 = new Vector2( 10.0f, 12.0f );
以下提供三種求距離長度的方式:
這邊講解一下,pos1 - pos2 的意思等同於 new Vector2(pos1.x - pos2.x, pos1.y - pos2.y)。
方法一
// 使用公式, 算出 distance = 3 float x = pos1.x - pos2.x; float y = pos1.y - pos2.y; float distance = Mathf.Sqrt( (x * x) + (y * y) ); // 以下做法跟方法一是一樣的 Vector2 pos = (pos1 - pos2); float distance = Mathf.Sqrt( (pos.x * pos.x) + (pos.y * pos.y) );
方法二
// 使用內建的 Vector2.Distance, 算出 distance = 3 float distance = Vector2.Distance( pos1, pos2 );
方法三
// 使用 Vector2.magnitude, 算出 distance = 3 Vector2 pos = (pos1 - pos2); float distance = pos.magnitude; // 以下作法跟方法三是一樣的 float distance = (pos1 - pos2).magnitude;
文章標籤
全站熱搜
留言列表