UE4-(蓝图)第三十九课行为树-Decorator(装饰器节点)
Decorator 是条件语句只能附加在其他节点上 并且定义所附加的节点是否执行 如果Decorator 是true 它所在的子树会被执行,如果是false 所在的子树不会被执行
一、自定义装饰器节点(简单的使用表现节点作用)
1.创建装饰器,在行为树界面工具栏创建装饰器,在行为树所在文件夹找到对应的蓝图,重命名D_AlwaysTrue.
2.覆盖函数
在D_AlwaysTrue蓝图函数列表中选择Override 选择PerformConditionCheck
创建效果:
将return value 更改为true
3.在行为树中使用装饰器节点,因为要附着于其他节点,所以测试使用Sequence节点。选中Sequence节点,右键选择添加装饰器选择定义的装饰器名称。
逻辑图:
4.因为返回值为true,下面Sequence 节点会被执行,如果将D_AlwaysTrue中返回值更改为false,则不会执行下面的节点。
更改为false的效果:显示红线说明该节点返回的是false,只有此节点不是最后一个节点时才会显示红线。
二、Blackboard(装饰器节点)
注意:与黑板重名,需要的变量是需要在黑板中设置的.
作用是检查其中某一个键是否设置
1.打开黑板,创建NewKey,字符串格式String,编译保存
选择变量类型
2.将上面Sequence节点中的D_AlwaysTrue删除,右键选择添加装饰器Blackboard
创建效果:
3.创建完成后选中创建的装饰器,在细节面板中设置属性
4.在细节面板中,将Blackboar栏下的 BlackboardKey选择为TestString
KeyQuery:选择判断的条件,里面为等于 不等于 包含 不包含
KeyValue 是该键的值,如果条件选择等于,则程序将黑板中设置的TestString值传递过来会与此值进行对比,如果相等,则执行该条件下的子树逻辑,如果不等,则此条件下的子树不会执行。
设置的值为1:
5.通过按键 xz 设置TestString 值
逻辑:1.在场景中放入一个使用AIController的pawn
2.通过使用Get All Actors Of Class 节点获取到场景中指定类的actor,我测试用的actor 使用的是以RobotController 的AI控制器类。
3.获取到actor后直接get Blackboard 得到黑板设置黑板中的值属性。
在获取到黑板后,拖拽连接线搜索 set values 就会出现可设置的选项,我们要选择在黑板中存在的变量类型。选择String类型。
参数:target 指的是 黑板,keyName 要设置的变量名称,string Value 要设置的变量值。
设置 key name 可以将此值提升为变量进行设置,也可以使用 make Literal Name节点进行设置
Z 键的设置 将 string value 变为 " "
运行结果:
按X键,按顺序执行两个节点
按Z键,执行完第一个返回false 后面的节点就不再执行
注意:当装饰节点下方的子树执行时,如果wait 节点设置的等待时间过长,此时按下Z键会发现只有wait时间执行完毕后才会切换到false状态。
将Blackboard 装饰器细节中的 Observer aborts 观察者终止 选择 self ,表示,当不满足条件时,就会立刻结束当前子树的执行。
在观察者终止中还有其他的参数,解释如下。
Key Query会随着设置参数的变量类型的不同而不同,请注意区分。