欢迎光临散文网 会员登陆 & 注册

UE任意固定巡逻点往返逻辑解析

2023-09-11 09:24 作者:布兰德儿老蒋  | 我要投稿

我在Arpg系列AI行为树的部分讲解了一个固定巡逻的方法,有些同学反映看不太懂,逻辑太复杂,那么今天我就用专栏文章的形式对里面的点做一些解析。 在这套方法里,我们要实现的是NPC可以按照任意设置的固定点进行巡逻,并且还能按照原路返回初始点,如此反复

首先是执行巡逻逻辑,这块很简单,如果能成功cast转化敌人蓝图就执行开始巡逻,失败的话行为树执行就失败

接下来我们要设置巡逻点,巡逻点是一个数组,我们在NPC的面板里可以任意添加地图中设置好的巡逻点,在设置巡逻点功能里,获取设置好的巡逻点,根据巡逻点序列这个黑板值来获取巡逻点数组当中对应序号的对象,获取他的位置,将位置向量投射到导航,作为行为树的巡逻目的地

我们在到达一个巡逻点后要增加当前巡逻的序列值,好获取巡逻点数组下一个巡逻点,所以制作一个增加巡逻点序列的功能来增加这个序列值,比如

巡逻点有5个,我们从1(数组序号0,因为数组序号是从0开始代表第一个)出发到2(序号1),然后序号+1,获取下一个巡逻点对象(序号2),依此类推,直到走到第五个点(序号4)。

这个是正常巡逻的顺序,我们到达最后一个巡逻点开始按照原路返回,这个时候巡逻点序列是

反过来

的,所以要开始做

减法

比如我们从第五个点(序号4)走到第四个点(序号3),

序号-1,走向下一个逆向的巡逻点(序号2),最后走回序号0

接下来是开始巡逻的逻辑内容 首先,我们要判断当前npc是走正向巡逻(数组序号0到n)还是走逆向巡逻(数组序号n到0)

所以一开始我们先判断当前AI的巡逻点序列(序号)是不是等于0 如果等于0,证明走的是正向巡逻路线,我们开始设置巡逻点(获取巡逻点的向量,好让NPC向目标移动),走到下一个巡逻点后

增加巡逻序列号

,以便让NPC知道下一个巡逻点是哪个,此时我们设置一个

布尔值“正向”

来标注此时走的是正向巡逻

如果不为0,那么此时NPC可能走正向,也可能在走逆向,打个比方,现在有5个巡逻点,此时

NPC在3这个点上,他可能从3走到4,也可能从3走向2

我们就通过前面的“正向”布尔值来判断是正向还是逆向 如果逆向,那么就减少巡逻点序号,往2个方向走,并设置正向布尔值为false 如果“正向”布尔值为真,那么也有两种情况

a. 此时npc已经走到巡逻点尽头,要开始掉头了,怎么判断巡逻到头了呢,就是通过获取巡逻点数组长度

长度是否等于序号,等于就证明走到最后一个巡逻点要开始掉头了 b.

没有走到巡逻点尽头

,不会掉头,继续往前走,执行增加巡逻点序列的那条分支

简单说就是我从0开始走,走正向,+1,走到1,再+1走到2,+1走到3,再+1,没有可走的了,我开始判断

3是否为尽头,看我巡逻点数量和当前巡逻点序号,相等,是尽头了,我开始掉头逆向走,-1走到2,-1走到1,再-1走到0,又走到0了我又开始掉头了,开始正向走,如此反复

我现在在2,我是走正向还是逆向?npc不知道,你要告诉他,通过正向布尔值判断,为true,我往3走,为false我往1走

可以添加任意巡逻点,根据巡逻点序号进行反复巡逻

UE任意固定巡逻点往返逻辑解析的评论 (共 条)

分享到微博请遵守国家法律