UE4行为树装饰器(Decorator)简单实用说明(1)
发表于2018-03-11
在行为树标准模型中,条件语句为 Task 叶节点,除成功和失败外不执行任何操作。虽然也可以使用传统的条件 tasks,但还是强烈推荐您使用 Decorator 系统作为条件语句。
使用 decorators 而非 tasks 作为条件语句有多个明显优点。
首先,条件 decorators 使行为树 UI 显得更加直观易读。条件语句位于其所控制分支树的根部,因此一旦条件语句未被满足,便可直接看到树的哪个部分被“关闭”。此外,所有叶节点均为行动 tasks,因此更容易分辨树在对哪些实际行动下达命令。 在传统模型中,条件语句混于叶节点中,因此需要花更多时间分辨哪些叶节点是条件语句,哪些叶节点是行动。(UE4官方说明文档中对Decorator的解释)
在我使用过程中对装饰器的理解是:装饰器是UE4行为树的判定节点,简单来讲就是它用来判定行为节点是否执行,以及行为节点执行后的结果反馈和处理。
当装饰器作为判定节点使用时候,通常我们要覆盖重写(Override) PerformConditionCheck或者PerformConditionCheckAI函数,我推荐使用后者,因为后者自带了2个参数, OwnerController(当前行为树所有者的控制器,也就是你运行的AIController),ControllerPawn(当前行为树所控制的pawn,简单来讲就是你要控制的Actor),比如我从AIController派生了一个MyAIController,控制了一个叫MyAIActor的角色,那么使用时候就很方便,直接把参数OwnerController 转换为MyAIController(CastToMyAIController),把ControllerPawn转换为MyAIActor(CastToMyAIActor)。
这就是一个简单的判定节点的装饰器,当PerformConditionCheckAI 函数返回真时候,则其修饰的节点才会运行,如果返回假,则下方节点就不再运行了
如上图,如果BTDecorator_IsAround节点返回值为false,则就不会执行BTTask_TestAround节点了。下一篇再继续讲装饰器的另外一个作用:行为节点执行后的结果反馈和处理。