前言

虚幻引擎行为树中允许将行为树做为其他行为树子树来使用,这可以大大扩展设计灵活性,将AI的行为细化。在行为树中提供了两个任务节点,以保证使用“子行为树”。两个节点分别是:Run Behavior和Run Behavior Dynamic。两者的设计目的相同,但在使用时存在一些差异,针对特定设计需求,Dynamic的节点会更加灵活。

  • Run Behavior:允许将其他行为树做为当前树的子树来使用。
  • Run Behavior Dynamic:允许将其他行为树做为当前树的子树来使用,并提供运行时,动态调整节点执行树。

Run Behavior节点,更像是将复杂的树结构拆解成独立的功能树,让行为树看起来更加的清晰。Run Behavior Dynamic是在保证拆解行为树的基础上,增加了运行时可以更换添加的子树,使得AI设计依据运行时变化,做出动态调整。

Run Behavior Dynamic节点使用

1、添加标签

当一颗行为树中有多个Run Behavior Dynamic节点时,引擎通过使用标签GamePlayTag区分动态设置到哪个节点上。所以在使用Run Behavior Dynamic节点前需要添加标签,添加方法参照官方介绍

此设置有点类似蒙太奇中的插槽。

2、添加Run Behavior Dynamic节点

在行为树中添加节点,并设置,参照下图。

3、运行时执行修改子树节点(蓝图)

如需修改子树节点,则需要获取运行行为树组件,并调用成员方法Set Dynamic Subtree,蓝图参照如图:

4、C++中调整(样例代码)

在C++中使用时需要添加模块“AIModule”,“GameplayTasks”,“GameplayTags”

c++
1
2
3
4
5
6
7
//代码在AIController里
if (UBehaviorTreeComponent* BehaviorTreeComponent = Cast<UBehaviorTreeComponent>(BrainComponent))
{
	FGameplayTag Tag = UGameplayTagsManager::Get().RequestGameplayTag(TEXT("BT.A"));//注意标签值
	//动态调整子树
	BehaviorTreeComponent->SetDynamicSubtree(Tag, OtherTree);
}

引擎版本:4.27.2