UE4-(蓝图)第三十九课行为树-Decorator(装饰器节点)

Decorator 是条件语句只能附加在其他节点上 并且定义所附加的节点是否执行 如果Decorator 是true 它所在的子树会被执行,如果是false 所在的子树不会被执行

一、自定义装饰器节点(简单的使用表现节点作用)

1.创建装饰器,在行为树界面工具栏创建装饰器,在行为树所在文件夹找到对应的蓝图,重命名D_AlwaysTrue.

UE4-(蓝图)第三十九课行为树-Decorator(装饰器节点)    UE4-(蓝图)第三十九课行为树-Decorator(装饰器节点)

2.覆盖函数

在D_AlwaysTrue蓝图函数列表中选择Override 选择PerformConditionCheck

UE4-(蓝图)第三十九课行为树-Decorator(装饰器节点)创建效果:UE4-(蓝图)第三十九课行为树-Decorator(装饰器节点)将return value 更改为true

3.在行为树中使用装饰器节点,因为要附着于其他节点,所以测试使用Sequence节点。选中Sequence节点,右键选择添加装饰器选择定义的装饰器名称。

UE4-(蓝图)第三十九课行为树-Decorator(装饰器节点)逻辑图:UE4-(蓝图)第三十九课行为树-Decorator(装饰器节点)

4.因为返回值为true,下面Sequence 节点会被执行,如果将D_AlwaysTrue中返回值更改为false,则不会执行下面的节点。

更改为false的效果:显示红线说明该节点返回的是false,只有此节点不是最后一个节点时才会显示红线。

UE4-(蓝图)第三十九课行为树-Decorator(装饰器节点)

二、Blackboard(装饰器节点)

注意:与黑板重名,需要的变量是需要在黑板中设置的.

作用是检查其中某一个键是否设置 

1.打开黑板,创建NewKey,字符串格式String,编译保存

UE4-(蓝图)第三十九课行为树-Decorator(装饰器节点)选择变量类型UE4-(蓝图)第三十九课行为树-Decorator(装饰器节点)

2.将上面Sequence节点中的D_AlwaysTrue删除,右键选择添加装饰器Blackboard

UE4-(蓝图)第三十九课行为树-Decorator(装饰器节点)

创建效果:UE4-(蓝图)第三十九课行为树-Decorator(装饰器节点)

3.创建完成后选中创建的装饰器,在细节面板中设置属性

UE4-(蓝图)第三十九课行为树-Decorator(装饰器节点)

4.在细节面板中,将Blackboar栏下的 BlackboardKey选择为TestString

UE4-(蓝图)第三十九课行为树-Decorator(装饰器节点)

KeyQuery:选择判断的条件,里面为等于 不等于 包含 不包含 

UE4-(蓝图)第三十九课行为树-Decorator(装饰器节点)

KeyValue  是该键的值,如果条件选择等于,则程序将黑板中设置的TestString值传递过来会与此值进行对比,如果相等,则执行该条件下的子树逻辑,如果不等,则此条件下的子树不会执行。

设置的值为1:

UE4-(蓝图)第三十九课行为树-Decorator(装饰器节点)

5.通过按键 xz 设置TestString 值 

逻辑:1.在场景中放入一个使用AIController的pawn UE4-(蓝图)第三十九课行为树-Decorator(装饰器节点)

2.通过使用Get All Actors Of Class 节点获取到场景中指定类的actor,我测试用的actor 使用的是以RobotController 的AI控制器类。

3.获取到actor后直接get Blackboard 得到黑板设置黑板中的值属性。

UE4-(蓝图)第三十九课行为树-Decorator(装饰器节点)

在获取到黑板后,拖拽连接线搜索 set values  就会出现可设置的选项,我们要选择在黑板中存在的变量类型。选择String类型。

UE4-(蓝图)第三十九课行为树-Decorator(装饰器节点)

UE4-(蓝图)第三十九课行为树-Decorator(装饰器节点)

参数:target 指的是 黑板,keyName  要设置的变量名称,string Value 要设置的变量值。

设置 key name 可以将此值提升为变量进行设置,也可以使用 make Literal Name节点进行设置

UE4-(蓝图)第三十九课行为树-Decorator(装饰器节点)

Z 键的设置 将 string value 变为 " "

UE4-(蓝图)第三十九课行为树-Decorator(装饰器节点)

运行结果:

按X键,按顺序执行两个节点

 UE4-(蓝图)第三十九课行为树-Decorator(装饰器节点)   UE4-(蓝图)第三十九课行为树-Decorator(装饰器节点)

按Z键,执行完第一个返回false 后面的节点就不再执行

UE4-(蓝图)第三十九课行为树-Decorator(装饰器节点)

注意:当装饰节点下方的子树执行时,如果wait 节点设置的等待时间过长,此时按下Z键会发现只有wait时间执行完毕后才会切换到false状态。

将Blackboard 装饰器细节中的 Observer aborts 观察者终止 选择 self ,表示,当不满足条件时,就会立刻结束当前子树的执行。

UE4-(蓝图)第三十九课行为树-Decorator(装饰器节点)

在观察者终止中还有其他的参数,解释如下。

UE4-(蓝图)第三十九课行为树-Decorator(装饰器节点)

Key Query会随着设置参数的变量类型的不同而不同,请注意区分。