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

上一节中setvalue只是我们测试用的,一般不会像上一节那样用。

aicontroller的作用很简单,就是用游戏开始事件来运行一下行为树。

为了练习行为树,我们做一个原始demo:没看到主角就巡逻,看到了就追主角

拖入导航网格,并调整大小

设计树是这个样子

 僵尸需要不停的判断是否看到了主角。

首先创建一个service

 service会默认放到当前文件夹里面,我们可以重命名:BTS_CheckAttackTarget

 

在服务中,我们覆写函数

 

 僵尸利用射线,来检测是否看到,所以我们添加射线检测节点

射线检测的原理就是检测两点中间是否有阻挡物。

起点是僵尸的位置,终点是玩家角色的位置

 由于射线是从人物模型的正中间发出的,所以射线要忽略点自身的结构。

自身就是忽略数组的第一个元素

为了让肉眼看到这个射线,我们设置射线持续一秒钟

 看到主角有两个必要的条件:1.主角与僵尸连线没有障碍2.主角与僵尸的向量与僵尸朝向向量相近

 位置向量只需要两个mesh的位置相减(方向应该是玩家角色位置-僵尸位置),然后单位化就可以了。

得到僵尸的朝向向量

 两个向量做点积运算,来判断向量的同向程度。

判断这个数值是否大于0.7小于等于1,这样的话可以保证两个向量的夹角在45之内。

 先判断两个必要条件

 在黑板里添加布尔变量seetarget

添加一个变量

 命名并点亮眼睛

给黑板的变量进行赋值

 为selector节点添加我们刚创建的服务

 这里可以选择默认控制的黑板变量

 继续添加树的结构

 下面为下一层的节点添加装饰器,来起到分支作用。

 

 修饰器绑定变量,is set就是true的意思。

 右边改成false

 当看到玩家就追玩家,此时老师有了一个更方便的想法,他不去向黑板存布尔值了,而是直接存玩家actor。

在黑板中创建object类型的数据

重命名

 选择类型是以actor为基类

 

服务里面重命名这个变量

当为true的时候,为黑板的变量赋值,用玩家角色赋值

这两个节点都改过来了

 move to任务也是target

为了方便,我们再修改一下树

 随机寻找目标还没有这个任务,所以我们要新建任务

再次之前,我们在黑板中存放 一个向量变量

给任务重命名

 在任务中覆写函数

 随机选点,以僵尸为中心

 随机盒子是300*300,不考虑z轴

 

添加变量,命名并点开眼睛

为黑板变量赋值

 一定要完成执行,要不然,行为树就一直卡在这个任务上。

添加我们创建好的task

 修改变量

 此时的行为树

  测试:成功

此时:僵尸还不会自己巡逻,因为target变量始终存放actor,所以一直都是is set的状态。

当看不到主角的时候,要将target设置为空。

 此外调整服务的频率为0.3+-0.1s.

测试成功。 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

无情的阅读机器

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

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

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

打赏作者

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

抵扣说明:

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

余额充值