# Behavior Designer 是什么?

Behavior Designer 是一款极其优秀的行为树插件. 它提供了非常强大的界面交互系统,可以帮助你轻而易举的创建各种任务行为.它拥有一套极其直观的交互界面,并可以与多种第三方插件配合,帮助你创造无比强大的智能AI系统.甚至完全不必书写代码.

当你使用这款插件的时候,虽然不必了解整个行为树系统是如何实现的,但是了解其中的一些关键概念还是非常重要的.比如说:行为树的任务节点类型.

行为树结构由4种节点类型构成.

    Action 行为节点

    Composite 复合节点

    Conditional 条件节点

    Decorator 装饰节点

当你安装好Behavior Designer插件并在Unity中打开它时,会看到下面这个界面. (见参考图: 01)         

behavior design 调用 playmaker behavior designer教程_Unity3D


# Behavior Designer 界面构成是怎样的?

Behavior Designer 的界面窗口总共分为4大区域 (见参考图:02)

behavior design 调用 playmaker behavior designer教程_Behavior Tree_02


1

图表区域

这就是你用来创建行为树的地方. 也是你在Behavior Designer工作时的主要操作区域. 在这个区域你可以创建新的任务节点,并手动的将这些任务节点部署到行为树当中去. 

2

属性区域

这里的功能比较多样,可以编辑行为树属性.建立变量.修改参数.快捷创建任务节点等等...

3

工具栏区域

你可以在这里通过下拉菜单快速选择现有的行为树文件. 或者快捷的添加/删除/保存/导出行为树文件.

4

调试信息区域

用于显示Debug信息.帮助用户进行问题调试.并且你可以在这里通过 开始/停止/步进按钮控制Unity的播放进程.


# 如何创建<Behavior Tree组件>和<任务节点>?

一开始,我们首先要添加一个Behavior Tree组件,该组件将自动成为你接下来创建的行为树文件的管理器. Behavior Tree组件创建完成后,它会自动绑定到你当前选择的Game Object上.

创建Behavior Tree组件有两种方法.

方法A

在图表区域 - 按下鼠标右键, 在弹出的菜单中选择<Add Behavior Tree>即可.

方法B

在工具栏区域 - 点击加号按钮也可以立即创建一个Behavior Tree组件. 

Behavior Tree组件创建完毕后, 你就可以开是给它添加任务节点了. 创建任务节点也有两种不同的方法

方法A

在图表区域 - 按下鼠标右键, 在弹出的菜单中选择<Add Task>分栏. 然后根据自己的需求选择需要创建的节点类型. 

方法B

在属性区域 - 选择<Tasks>分栏, 在这里选择要添加的任务节点类型. 



# 一个任务节点添加的样例

behavior design 调用 playmaker behavior designer教程_行为树_03

: (见参考图03) 我们在行为树中创建了一枚Sequence节点.(也叫顺序节点).可以看到除了你刚添加的顺序节点之外,上方还自动增加了一个名为Entry的入口节点. 

你要记住,Entry节点,是整个行为树的根节点,它是在首次创建节点时自动生成的.我们还可以看到在刚刚添加的Sequence顺序节点上有一个红色报错.这是因为它的运作需要子节点的支持,等你为它添加子节点后,这个错误就会自然的消失了.不必在意.

接下来我在继续添加一些新的节点,让我们可以更好的观察行为树的视觉表现.

behavior design 调用 playmaker behavior designer教程_Behavior Designer_04

这里要额外说明一下,Action A-E 这5个行为节点是怎么来的. 你可能已经注意到了,在你的添加任务节点菜单中,并没有这几个节点选项. 因为这些节点是需要用户手动创建的. 


# 那么如何创建自己的行为节点(Action节点)呢? 

接下来我用一小段代码来演示如何创建一个名为 ActionA的"行为"节点. 

// 必须引入的命名空间
using UnityEngine;
using BehaviorDesigner.Runtime;
using BehaviorDesigner.Runtime.Tasks;

// ActionA行为节点 <必须继承自Action类>
public class ActionA : Action
{

} // End

当你完成该节点的类文件创建后,再次回到Behavior Tree的窗口进行Add Task/Actions类型的节点添加时,就可以看到这个名为ActionA的节点了. ^_^ 

现在所有节点已经创建好了,接下来你要把每个节点像(参考图:05)那样连接到一起.


# 那么如何将节点连接到一起呢? 

你应该会注意到,每个节点图标的上下端都至少有一个小型的突起图案(参考图:06). 这就是操作连接节点的地方,你只需要将鼠标放在一个节点的突起图案上,然后按住鼠标左键进行拖拽,就会出现一条白色的连接线,我们将这条线放置在其他节点的突起图案区域,就会形成节点连接. 非常容易. 

当然如果产生了错误需要修改/删除,我们只需要左键单击对应的连接线然后按下Delete键,就可以实现节点线的清除了. 

behavior design 调用 playmaker behavior designer教程_游戏开发_05


# 节点的执行顺序是怎样的呢?
Behavior Designer 的节点执行顺序为由左至右,并且深度优先. 仅看字面意思比较难以理解.我们以参考图:05为例. 描述一下它的节点执行顺序. 
Entry > SequenceA > SelectorA > SequenceB > ActionA > ActionB > ActionC > SelectorB > ActionD > ActionE

了解节点的执行顺序非常重要. 这是行为树执行逻辑的根本所在. 童鞋们务必牢记. 


* 到这里我们已经创建了一棵基础行为树了. 接下来让我们来修改其中一个节点的属性值. 

# 如何修改任务节点的属性值呢?

我们将以ActionC行为节点为例,进行下面的讲解. 那么首先选中ActionC节点. 然后看向其左侧的属性区域面板. 并确保打开Inspector分栏.  (见参考图:07) 我们可以在这里修改节点名称, 修改Instant属性(该属性的意义在后面解释,不必着急.) 添加Comment说明.  

behavior design 调用 playmaker behavior designer教程_游戏开发_06

除此之外,我们可以在这里修改该行为类所包含的一切Public类型的变量. 以上图为例,我们看到ActionC行为节点类包含了一个名为Rotation Speed的变量值, 在这里我可以随意的修改该值,比如让它等于5. 这样的值都可以在行为树中参与逻辑交互. 

当然了,你的ActionC类文件肯定没有这个RotationSpeed属性. 去类文件中声名一下就好了. 可以参考下面代码. 

using UnityEngine;
using BehaviorDesigner.Runtime;
using BehaviorDesigner.Runtime.Tasks;

public class ActionC : Action
{
    public float RotationSpeed = 0;
}


# 介绍一下工具栏区域(Operations toolbar) 

工具栏区域主要用于进行 - 选择/添加/删除/保存行为树,等功能. 以下图为例,我们对应数字挨个介绍一下它们的对应功能.

behavior design 调用 playmaker behavior designer教程_Behavior Designer_07

1

这是一个行为树导航按钮,通过点击左右两枚箭头图标,可以在所有已经打开的行为树文件中进行切换显示. 

2

这是一个下拉框按钮,点击后会展示出所有该项目拥有的行为树文件,不只是当前场景中的,包括那些导出为prefab或者assets格式的外部行为树文件. 只要在你项目中,它们就会被搜索并展示出来. 

3

这个下拉框按钮,跟2是完全一样的功能.但是会显示出当前选择的行为树所绑定的对象的名字

4

这里会列出所有绑定在<3>中所选择的对象上的行为树文件. 由此可知一个对象可同时拥有多套行为树加持. 

5

减号按钮可以用来删除当前所选择的行为树文件

6

加号按钮可以用来快捷的创建一个行为树组件到当前选择的对象上. 

7

锁定按钮可以保持当前行为树窗口的选中效果. 避免你在接下来的选择操作中对其产生影响. 

8

保存按钮可以将你当前的行为树文件保存并导出为外部行为树文件. 支持保存为二进制格式(.asset)或者Json格式(.prefab)

在新版本中,Save按钮消失了,改成Export按钮了.但功能是一样的,不必疑惑. 

9

Preferences插件功能偏好设定按钮. 在这里可以调节一些插件的功能属性. 比如设定行为树的保存格式.


# 好了.到这里我们已经了解了以下内容.

  1. Behavior Designer 是一款什么样的插件.
  2. 它的界面构成是怎样的.
  3. 如何创建行为树组件以及添加任务节点
  4. 如何用代码自定义属于自己的节点类型
  5. 如何连接节点/删除节点连接
  6. 行为树的节点执行顺序是怎样的
  7. 如何修改任务节点的属性值
  8. 工具栏的各个按钮的功能是什么