25_ue4进阶末日生存游戏开发[行为树进阶]

我们上两节写了两种的巡逻方式。

我们用第一个方法。所以我们还原一下行为树。

现在测试一下:发现了一个bug,当僵尸发现主角之后,就一直追着主角,因为黑板中的target一直都是主角。这是因为即使看不到主角,也不会将taget置为空值。

所以我们只能自己动手做一个服务了,我们新建一个服务。

 

 

重命名

 覆写方法

我们想把目前我们用来服务的eqs 包裹进来,所以添加这个节点

 以actor数组的方式返回

 因为只有一个游戏角色,所以我们只需要得到第0个元素。

新增一个变量,并点亮眼睛

 

 判断是否取到了actor,如果actor数组的长度为0,说明僵尸没有发现主角。

 如果长度不等于0,那么将target赋给黑板。

 否则设置空值到黑板里面。

 回到行为树,删掉这个eqs服务

 选择我们新创建的服务

 设置该服务频率 是0.2s。

测试:僵尸看不到角色,并且出现报错。

 这是因为这个过程是异步的,所以我们让run eqsquery节点执行完,在进行其他的。

 这个时候我们要为他绑定事件。

 

连线

 这里也要连一下

进入target检测的eqs,我们将僵尸的视野调到100.

 

 测试:僵尸可以看得到我们,也可以看不到我们。但是有个bug,当加僵尸追我们到一定的地方,我们躲起来,僵尸就不动了,不自己找点了。

那是因为僵尸找随机点的eqs加了一个距离过滤,超出初始点一定的范围的点就是无效点了。所以僵尸就不会动了。

解决方法,添加一个强制执行的装饰器。

这样的话,僵尸就会move to到上一个点。

测试:僵尸会回到上一个点,但是在这个过程中不会理玩家。

优化:修改树的子部分的优先级

这里设为self,当target为is set ,立马放弃运行下面的叶子节点。

 

测试:成功。 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无情的阅读机器

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值