装饰器(BTD)
装饰器节点(在其他行为树系统中也称为条件语句)连接到合成(Composite)或任务(Task)节点,并定义树中的分支,甚至单个节点是否可以执行。
服务(BTS)
服务(Service) 节点通常连接至合成(Composite)节点或任务(Task)节点,只要其分支被执行,它们就会以定义的频率执行。这些节点常用于检查和更新黑板。它们取代了其他行为树系统中的传统平行(Parallel)节点。
任务(BTT)
本页面为行为树编辑器中可用的 任务(Task) 节点的参考页面。任务节点的功能是实现操作,例如移动AI或调整黑板值。它们可以连接至 装饰器(Decorators)节点 或 服务(Services)节点。
接下来是现阶段的整个行为树系统以及黑板,结构,枚举等
首先是播放动画功能(BTT)
Task 中的常用事件
Event Receive Execute / Event Receive Execute AI
定义该 Task 的主体逻辑代码,如果没有特殊需求,则必须以 Finish Execute 节点结束,因为只有 Finish Execute 节点才能想上层返回执行结果,否则该 Task 如果不被打断将不会执行完成
如果同时存在 Event Receive Execute 和 Event Receive Execute AI 两个事件,优先执行 Event Receive Execute AI 事件
Event Receive Abort / Event Receive Abort AI
当前任务被打断时触发该事件,用来处理突发情况对当前行为的影响,如果没有特殊需求,则必须以 Finish Abort 节点结束,以结束该任务节点的执行
如果同时存在 Event Receive Abort 和 Event Receive Abort AI 两个事件,优先执行 Event Receive Abort AI 事件
写好后在行为树调用即可自行选择要播放的蒙太奇动画
然后是判断距离的功能(BTS)
Get distance to:获取距离
Compare float:比较函数
需注意变量的设置
其变量类型如下
公开的目的是为方便在行为树中选择枚举DistanceType。
进而在之后的节点可以选择枚举中的距离类型以做出相应编辑。
然后是判断能不能攻击的功能
有两,一个是确认能不能攻击(BTT_CheckAttack)以及检查能否攻击(BTS_CheckCanAttack)
Get Time Seconds:游戏开始到现在过去了多少秒
用它减去最后一次攻击的时间便得出了它当前已经走过了多少秒,然后再判断它是否大于冷却时间,如果大于则设置can attack为true;
接下来是现阶段的远程攻击系统
折磨人的EQS了
EQS(Environment Query System),直译为环境查询系统,可以理解成对当前场景状态的扫描或者检查,往往配合AI行为树一起使用。其实现原理比较好理解,简单来说就是将场景环境划分,一般来说是按密度划分成一个一个点,当然也可以以场景元素Actor来进行划分,将环境划分好后,再按照相应的设定规则对划分项(点或Actor)进行打分,最后得分最高的Item即为系统所找到的最优查询结果。EQS系统将其最优查询结果告知AI,AI行为树则会对来其进行相应的决策及执行。
开启Edit–Editor Preferences–搜索框EQS,然后勾选“Environment Querying System”,然后AI框里会多一个EQS蓝图
先做一个飞剑吧
注意左边加上的东西
飞剑的蓝图,主要是让它出现之后往上升一段
测试时的EQS类
要新建的EQS
新建Donut
Donut是围绕Test生成一圈的Point点,我们要在其中选择一个计算出的分数最高的点传给行为树以生成飞行道具
Donut设置
为EQS添加Dot
它会根据旋转的模式得到一个正方向的向量(这个旋转是查询者的旋转,也就是Boss)
此向量为lineA
第二条向量是通过两个点得到的向量
从Boss到查询的目标点的向量(此处使用的是Dot 2D)
此向量为LineB
注意Purpose的设置。
将float value min为0
意思是我们通过正方向旋转一定角度,这个角度通过点积计算出的值,最低最低为-0.5
设置了Purpose之后可以看到离LineA的点分数是最高的
修改scoring Equation选项就会反过来。