Behavior Designer – 一个好用的行为树插件

【简介】

Behavior Designer 是一个行为树插件。可以让设计师,程序员,美术人员方便使用的可视化编辑器。 Behavior Designer 提供了强大的 API 可以让你轻松的创建 tasks(任务),配合 uScript 和 PlayMaker 这样的插件,可以不费吹灰之力就能够创建出强大的 AI 系统,甚至连一行代码都不用写。

【官网学习地址】

http://www.opsive.com/assets/BehaviorDesigner/videos.php

官网视频从行为树基础到插件的使用再到各个例子的讲解,挺详细,易上手。

【一个把官方文档总结翻译成中文的博客】

1,什么是行为树(What is a Behavior Tree)

2,概述(overview)

3,行为树设计师插件组件(Behavior Tree Component)

4,代码方式创建行为树组件(Creating a Behavior Tree from Script)

5,行为管理器(Behavior Manager)

6,任务(Tasks)

7,父任务(Parent Tasks)

8,创建任务(Writing a New Conditional/Aciton Task)

9,调试(Debugging)

10,变量(Variables:1,Global Variable,; 2,Creating Shared Variables; 3,Accessing Variables from non-Task Objects)

11,条件终止(Conditional Aborts)

12,事件(Events)

13,外部行为树(External Behavior Trees)

14,网络(Networking)

15,任务引用(Referencing Tasks)

16,变量同步(Variable Synchronizer)

17,任务内部属性(Task Attributes)

18,默认动作任务(Task list–Action)

19,默认复合任务(Task List–Composites)

20,默认条件任务(Task List–Conditionals)

21,默认装饰任务(Task list–Decorators)

22,基本内置任务列表(Task List–Basic Tasks)

【关于Conditional Abort】

条件终止(Conditional Aborts)允许你的行为树可以动态的响应改变,而不要大量杂乱的使用Interrupt/Perform去中断任务, 这个功能非常类似Unreal Engine 4引擎里面的观察者终止功能(如果你用过UE4就可以了解到)。 其他大多数行为树插件的实现方式是重新运行整个行为树,而条件终止则采用了更加优化的方式来实现,不需要重新运行整个行为树。

具体来说就是,当条件任务发生改变的时候,会根据设置的Abort Type来终止相关任务,然后按照行为树的运行设置去运行其他任务。

一共有4种条件终止类型:不终止(None),自我终止(Self),低级别终止(Lower Priority),双向终止(Both)。

类型 图示 功能
None不终止 不进行条件终止
Self自我终止 可以终止同一个父节点下的Action类型的任务
Lower Priority低级别终止 设置成低级别终止的任务,具有比其他任务更高级的级别,当该任务条件发生改变时,可以终止其他任务
Both双向终止 self和lower priority一起使用

Conditional Abort其实挺让人头晕的,特别是当多个嵌套起来,简直搞事。通过例子可能会有更深的了解。

(例1.官方例子

·没有勾选RestartWhenComplete时:当Conditional条件返回Failure的时候行为树结束。
Sequence的Abort Type为 None 时:Conditional条件为一次行为,若为Success则执行Wait,直到Wait结束(在Wait执行中Conditional变为Failure也不影响Wait执行);若为Failure则直接结束。
                        Self :Conditional条件为循环行为,若从Success变为Failure,会打断Wait。
               Lower Priority:Conditional条件为一次行为,若从Success变为Failure,会打断Sequence以后节点继续执行(但是这里Sequence后没有节点,所以对这个树来说没有影响)。
                        Both :Conditional条件为循环行为,若从Success变为Failure,会打断Sequence以下和以后的节点继续执行(在这里表现上和Self一样)。
·当勾选RestartWhenComplete时:
Sequence的Abort Type为 None 时:当每次Restart时,检测Conditional条件;若在Wait节点,Conditional条件改变,不会影响Wait继续执行。
                        Self :当Conditional条件改变时,Sequence以下节点会立即暂停并根据Conditional做出反应。
               Lower Priority:当Conditional条件改变时,Sequence以后节点会立即暂停并根据Conditional做出反应。(但是这里Sequence后没有节点,所以对这个树来说没有影响)。
                        Both :结合Slef和Lower Priority。

(例2.

1 例2图 cube Cube的行为树图 Cylinder Cylinder的行为树图

(说明:黑色方块会在2秒后开始线性移动到红色方块的位置; 一开始方块不在圆柱体的视线范围内,当方块移动到近中间位置时,会进入圆柱体视线范围; 在圆柱体Seek方块的过程中,方块在某一时刻会离开圆柱体视线范围。

(Cylinder行为树中Sequence的Abort Type选择: None:因为一开始不在视线范围内,所以一直在Idle状态,没有能打断Idle节点的条件,所以不再进入Sequence节点。 Self:同None Lower Priority:当Cube进入视线后,会打断Idle,进行Seek操作;在Seek中Cube离开视线时,没有能打断Seek节点的条件,所以还是执行Seek操作。 Both:当Cube进入视线后,会打断Idle,进行Seek操作;在Seek中Cube离开视线时,会打断Seek,进入Idle。

【参考链接】

1.君莫笑博客-BehaviorDesigner学习

2.Unity BehaviorDesigner BehaviorTree 的Conditional Abort机制解读

Add a Comment

您的电子邮箱地址不会被公开。 必填项已用*标注