最近做一个潜入游戏其中有一种敌人面前会有一个扇形的检测范围,并且此扇形范围会来回旋转移动,所以就遇到了一个如何判断主角是否在扇形范围内的问题。在网上找了一些方法,但是感觉都太复杂,所以这里自己实现了一下。
思路如下:
我的扇形的生成方式是从中心方向像两边展开若干角度。
所以我们只要算出扇形的中心向量与角色向量的夹脚是否大于扇形的展开角度即可。
步骤:
扇形的来回摆动是有程序控制,所以这里可以很容易得到扇形当点的摆动角度,这样就可以很容易的算出扇形的中心方向。
这里我们只需要一个单位向量即可,所以向量的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);
最后使用此结果与扇形的展开角度进行比较即可。