天天看點

判斷點是否在扇形範圍内

最近做一個潛入遊戲其中有一種敵人面前會有一個扇形的檢測範圍,并且此扇形範圍會來回旋轉移動,是以就遇到了一個如何判斷主角是否在扇形範圍内的問題。在網上找了一些方法,但是感覺都太複雜,是以這裡自己實作了一下。

思路如下:

我的扇形的生成方式是從中心方向像兩邊展開若幹角度。

是以我們隻要算出扇形的中心向量與角色向量的夾腳是否大于扇形的展開角度即可。

步驟:

扇形的來回擺動是有程式控制,是以這裡可以很容易得到扇形當點的擺動角度,這樣就可以很容易的算出扇形的中心方向。

這裡我們隻需要一個機關向量即可,是以向量的x方向長度為cos(angle) = x/1,y方向為sin(angle) = y/1。

是以我們的代碼應該是這樣:

float sectorangle = (eulerAngles) * (Mathf.PI / 180f);
Vector2 from = new Vector2(Mathf.Cos(sectorangle), Mathf.Sin(sectorangle));
           

由于扇形的擺動是用角度來計算的,而Sin和Cos函數需要的是弧度,是以這裡先計算出對應的弧度。

from即為我們需要的中心機關向量。

然後計算扇形中心點到目标點的機關向量,這個非常簡單,兩個坐标相減再進行歸一化即可:

Vector2 to = (target.position - position).normalized;
           

現在我們隻要計算兩個向量的夾腳即可,unity為我們提供了現成的方法:

float angle = Vector2.Angle(from, to);
           

最後使用此結果與扇形的展開角度進行比較即可。

繼續閱讀