在做rpg類游戲的過程中,經(jīng)常遇到要判斷周圍怪物相對自身的方位
1.判斷目標(biāo)在自己的前后方位可以使用下面的方法:
Vector3 forward = transform.TransformDirection(Vector3.forward);
Vector3 toOther = target.position - transform.position;
if (Vector3.Dot(forward, toOther) < 0)
print("The other transform is behind me!");
else
print("The other transform is forward me!");
返回值為正時,目標(biāo)在自己的前方,反之在自己的后方
2.判斷目標(biāo)在機(jī)子的左右方位可以使用下面的方法:
Vector3.Cross(transform.forward,?target.position).y
返回值為正時,目標(biāo)在自己的右方,反之在自己的左方
3.在這里順便解說下關(guān)于空間向量的點積和叉積:
A.點積
點積的計算方式為:a·b=|a|·|b|cos??其中|a|和|b|表示向量的模,表示兩個向量的夾角。另外在?點積?中,和 夾角是不分順序的。
所以通過點積,我們其實是可以計算兩個向量的夾角的。
另外通過點積的計算我們可以簡單粗略的判斷當(dāng)前物體是否朝向另外一個物體: 只需要計算當(dāng)前物體的transform.forward向量與 otherObj.transform.position 的點積即可, 大于0則在前方,否則在后方。
B.叉積
叉積的定義:?c =a x b??其中a,b,c均為向量。即兩個向量的叉積得到的還是向量!
性質(zhì)1:?c⊥a,c⊥b,即向量c垂直與向量a,b所在的平面?。
性質(zhì)2:?模長|c|=|a||b|sin
性質(zhì)3:?滿足右手法則?。從這點我們有axb ≠ bxa,而axb = – bxa。所以我們可以使用叉積的正負(fù)值來判斷向量a,b的相對位置,即向量b是處于向量a的順時針方向還是逆時針方向