判斷點是否在扇形範圍內
阿新 • • 發佈:2019-02-16
最近做一個潛入遊戲其中有一種敵人面前會有一個扇形的檢測範圍,並且此扇形範圍會來回旋轉移動,所以就遇到了一個如何判斷主角是否在扇形範圍內的問題。在網上找了一些方法,但是感覺都太複雜,所以這裡自己實現了一下。
思路如下:
我的扇形的生成方式是從中心方向像兩邊展開若干角度。
所以我們只要算出扇形的中心向量與角色向量的夾腳是否大於扇形的展開角度即可。
步驟:
扇形的來回擺動是有程式控制,所以這裡可以很容易得到扇形當點的擺動角度,這樣就可以很容易的算出扇形的中心方向。
這裡我們只需要一個單位向量即可,所以向量的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);
最後使用此結果與扇形的展開角度進行比較即可。