Unity中如何实现寻路并发现自己面前的的敌人(扇形)
首先提到这个知识点一开始就要想到点乘!!!
什么是点乘:
几何意义—点乘就是b向量在a向量上的投影。
点乘能够得到目标点在我的前面还是后面:
若为正数—在前面
若为负数—在后面
若为0—在“绝对”侧面
所以我们可以通过计算得到目标点在我的前面还是后面。
在此基础上我们可以通过数学关系式子得到夹角。
首先,以怪物的单位面朝向为a向量,以玩家到怪物的位置差向量为b向量的单位向量(用单位向量的原因是方便得到角度)
Cosβ = 领边/斜边 = ab向量的点乘/b向量的单位向量(为1) = ab向量的点乘。
=>β = Acos(ab向量的点乘) => Acos(单位向量a * 单位向量b)。 注意不要忘记转弧度
完整代码演示:
float r = Vector3.Dot(transform.forward, (target.position - this.transform.position).normalized);
float β = Mathf.Acos(r) * Mathf.Rad2Deg;
在此基础上只要限制你想要的范围和检测距离就能实现想要的效果了!
当然,还有更简单的方法—使用API
Vector3.Angle(一个方向向量,另一个方向向量);就能得到两个向量之间的角度
浙公网安备 33010602011771号