EQS环境查询对应Actor的范围
EQS环境查询查询对应的类
查询到即有一个蓝色的球在Actor上,里面有位置信息等等
在行为树运行EQS,按键(‘)可以看到Player的位置已经被标记
运行对应的EQS在这里放如EQS就可以了
Generated Point:
Add Generated Vector就是加点的意思
就生成对应点啦
这里的每一个Context Location都代表使用该环境查询的Pawn的位置,用for循环代表每个Pawn的附近都生成对应点位
Add Generated Actor就是在对应类的Actor标记位置信息
Points: Gird
效果如下:
在Actor附近生成网格形状的点位
Points: Cone
Points: Donut
Points: Circle
Points: PathingGrid
这个和Grid看起来很相似,但是PathingGrid只能在导航网格可导航范围内进行点位生成,而Grid不管是不是在导航网格内,它都生成
Distance:
如果时仅得分,且Scoring Equation是线性,那么就是离Pawn越近分数越低
逆线性就是离Pawn越近分数越高
Constant即所有都为常数1
而球形不根据距离来计算得分,而是根据隔几个点位就加多少分
这个暂时还不了解,以后补充
使用EQS做随机移动
将查询Winner位置给TargetLocation
再MoveToTargetLocation
效果如上
做一个功能使得宠物永远在玩家身后跟随
首先建立一个EnvQureyContext
在Override位置选择提供单一Actor,把玩家Actor输出出去
建立一个SimplieGrid
加上Dot
选择仅积分,且逆序,这样
把Rotation设置为刚才创建的Context,这样包括PlayerPawn旋转也会影响到点位积分对应的值,使得玩家旋转也能保持宠物在后面跟随,第二个就是Line From也设置为之前的Context,这样就会以PlayerPawn的位置进行重新积分,Line To改为Item,因为LineFrom输出为Actor,不是FVector,是一个具体的Actor用Item,一个FVector点位用Query
然后设置具体范围,在离玩家直线距离为100cm至200cm之间
计算出的点位放到FVector类型的TargetLocation(黑板里面加值),然后MoveTo计算出的位置即可
效果如下:
制作AI逃离玩家视线:
首先还是生成一个SimpleGrid
选择Trace
首先选择得分
第二选择以玩家视角来计算点的权重,最后取消Bool Match不然会到达玩家看不到的点就不行走了
只做Trace会存在死角,AI不动的问题,所以就得增加Distance节点
选择仅积分,且以玩家位置的距离进行计算,越远积分值越大,这样AI被逼到死路也会根据距离判定去继续行走其它位置,并重新计算逃离玩家视线
最后增加路径是否有效,无效则为0,有效存在值,然后设置仅积分
只用PathExist可看到积分效果,为上图
这样就做好了,AI躲避玩家实现的EQS了