1. 程式人生 > >Unity中判斷目標在自己的哪個方位

Unity中判斷目標在自己的哪個方位

在做rpg類遊戲的過程中,經常遇到要判斷周圍怪物相對自身的方位

1.判斷目標在自己的前後方位可以使用下面的方法:

   Vector3.Dot(transform.forward, target.position)

       返回值為正時,目標在自己的前方,反之在自己的後方

2.判斷目標在機子的左右方位可以使用下面的方法:

   Vector3.Cross(transform.forward, target.position).y

      返回值為正時,目標在自己的右方,反之在自己的左方

3.在這裡順便解說下關於空間向量的點積和叉積:

A.點積 
  點積的計算方式為: 

a·b=|a|·|b|cos<a,b>  其中|a|和|b|表示向量的模,<a,b>表示兩個向量的夾角。另外在 點積 中,<a,b>和<b,a> 夾角是不分順序的。 
  所以通過點積,我們其實是可以計算兩個向量的夾角的。
  另外通過點積的計算我們可以簡單粗略的判斷當前物體是否朝向另外一個物體: 只需要計算當前物體的transform.forward向量與 otherObj.transform.position 的點積即可, 大於0則在前方,否則在後方。

B.叉積 
  叉積的定義: c =a x b  其中a,b,c均為向量。即兩個向量的叉積得到的還是向量! 
  性質1: c⊥a,c⊥b,即向量c垂直與向量a,b所在的平面 。 
  性質2: 模長|c|=|a||b|sin<a,b> 
  性質3: 滿足右手法則 。從這點我們有axb ≠ bxa,而axb = – bxa。所以我們可以使用叉積的正負值來判斷向量a,b的相對位置,即向量b是處於向量a的順時針方向還是逆時針方向