在游戏unity怪物aiAI中unity怪物ai一般都会有巡逻这一动作,在没有发现玩家时unity怪物ai就会在自己的巡逻范围内移动这里该如何检测unity怪物ai是否在自己的巡逻范围内呢?这里假定巡逻范圍为一个多边形区域
在这个由点A,B,C,D构成的四边形是巡逻区域,点E,F,K为我们要检测的位置点点E在四边形内,E和F都在四边形外这里分别在点E,F,K嘚水平方向上画一条横线。我们发现点K和点E都与四边行有两个交点点K的交点(n,m)都在右侧,且右侧数量为偶数点E的交点(i,j)在E点两侧数量为奇數。
在这个多边形中点I,J,K 是我们要检测的点点J在范围内,点K,I不在范围内
我们发现在上图中点J与多边形有两个交点(P,Q),左右两边交点数量都為奇数
点I与多边形有四个交点(L,S,R,M),左右两边的交点数量都为偶数
点K与多边形有四个交点(N,T,O,V),左右两边的交点数量都为偶数
也就是说判断點是否在多边形范围内,只需要判断该点在水平方向或垂直方向上与多边形的交点与该点左右两边的数量即可
如果检测点左右两边与多邊形交点的数量为奇数,那么就在多边形范围内为偶数就不在范围内。
在Unity代码实现上只需要判断测试点的水平方向与多边形的交点数量就行了。
/// 计算一个点是否在一个多边形范围内 /// 如果过该点的线段与多边形的交点不为零且距该点左右方向交点数量都为奇数时 该点再多邊形范围内 //判断测试点和横坐标方向与多边形的边的交叉点 //处理直线方程为常数的情况
在这里我忽略了Y轴只考虑二维情况。
首先判断测試点z轴的值是否在每条边的值域内。
将测试点的x值代入每个边的直线方程结果比测试点x值小就在左边,否则在右边
最后判断奇偶数僦行了。
本文由 树莓屋 作者: 发表转载请注明来源!