#概述
BehaviorTree组件编辑器是Egret Pro为用户提供的一个直观、可视化AI行为树编辑器,可以创建复杂的AI行为并且无需编写代码。使用行为树编辑器,您不需要知道基础行为树的实现机制,只需了解例如动作,复合,条件和装饰器等基本任务类型即可。
#打开行为树
首次打开行为树编辑器,使用鼠标右键在资源视窗新建一个行为树资源,双击资源视窗中的行为树资源图标:
打开行为树编辑器后,您将看到三个主体部分:
①菜单列表:您可以选择Egret Pro中内置的节点类型、用户新建的节点类型添加至您的AI行为树中。另外,当您编辑出错时,此处也会有错误栏提示您修正错误。
②可视化编辑区域:您可以在这里编辑行为树的结构、增添行为节点或是分支。
③属性编辑区域:当您选中某一节点时,节点的属性会在右侧呈可编辑的状态列出,您可以通过Inspector视窗修改任意节点属性,就像您在Egret Pro的Inspector视窗编辑实体组件属性一样。
#什么是行为树?
#行为树还是状态机?
在早期游戏开发中,有限状态机被广泛使用,它包含了有限个的状态和状态间的转换条件,符合我们对AI直观的认知。随着时代更替,游戏中的AI被赋予了更多的期望与要求,而有限状态机的缺点开始愈发致命——它随着状态和转换条件的增多而变得错综复杂,十分难以拓展,并且各个状态之间高度耦合,无法复用。因此,多数游戏开发者选择行为树来构建游戏AI。
#行为树原理
行为树被广泛用于游戏中的AI决策。由于游戏中的AI大多数都是按照规则设定好的,对于AI行为的判断类似一颗树一样,有很多判断分支。行为树的行为都是在叶节点上,是真正AI要执行的行为逻辑,每个判断分支从上至下,执行到叶节点,把最终判断返回成功的行为节点逻辑执行,从而实现决策,这就是行为树的基本原理。
值得注意的是,并不是每个节点都有行为逻辑,仅叶节点才是我们真正通过行为树决策出来的结果,您可以通过添加叶节点定义AI行为逻辑。
所有行为树都有一个起始的入口节点EntryTask,此节点不可选中更改,需要有且仅有一个子节点分支来才可以执行整个行为树逻辑。
#基本节点类型
#Action 行为节点
行为节点时最普通的任务节点,它是唯一执行行为的节点。
例如:攻击 巡逻 拾取道具等等
#Composites 复合任务节点
复合节点用来控制树的遍历方式,每种组合节点的遍历方式都不相同。
1.选择节点
选择节点(Select),遍历方式为从左到右依次执行所有子节点,只要节点返回 Fail,就继续执行后续节点,直到一个节点返回Success为止,停止执行后续节点。如果有一个节点返回Success 则向父节点返回Success 。否则向父节点返回 Fail。
2.顺序节点
顺序节点(Sequence),它从左向右依次执行所有节点,只要节点返回Success,就继续执行后续节点,当一个节点返回Fail 时,停止执行后续节点。向父节点返回 Fail ,只有当所有节点都返回 Success 时,才向父节点返回 Success。
3.并行节点
并行节点(Parallel)有 N 个节点,每次执行所有节点,直到一个节点返回 Fail 或者全部返回 Success为止,此时并行节点向父节点返回 Fail 或者 Success,并终止执行其他所有节点 。
#Conditionals 条件任务节点
条件任务节点:只有满足了条件才返回Success的节点,例如内置的随机节点。
#Decorators 修饰任务节点
修饰节点(Decorator) 为对子节点进行修饰,
修饰节点常用的几个类型如下:Inverter 对子节点执行结果取反
Repeater 重复执行子节点 N 次
Return Failure 执行到此节点时返回失败
Return Success 执行到此节点时返回成功
Unitl Failure 直到失败,一直执行子节点
Until Success 直到成功,一直执行子节点
#制作一个简易AI行为树
为了更好的理解行为树工作流,我们将利用行为树制作一个随机输出log消息的简易AI。
首先您打开行为树编辑器以后,点击左侧创建节点列表 复合节点列表下的 Select选择节点,可以看到屏幕中央生成一个选择节点。
点击拖动节点下方的小方块,拖拽一下,您会发现拖拽出了一条曲线,我们将根据曲线来确定节点和节点之间的父子关系。
拖拽时,您会发现可以链接节点上方小方块的区域呈高亮,这代表着这个节点可以被建立关系,将曲线另一端拖拽至高亮区域,松开鼠标,您就可以构建两个节点的父子关系。
成功建立关系后,发现 节点右侧 以及窗口左侧 会有错误提示,这代表着Selector是一个复合节点,必须要有子节点才行为树逻辑才可以运行。
我们将行为树依据上述操作,构建成下方图示:
温馨提示:您在构建树时,可以利用鼠标中键拖拽整个树编辑窗口,利用滚轮来缩放树编辑窗口的视野。节点也支持框选移动。
选中LogAction节点,右侧Inspetor可以编辑节点的属性。
将两个log Action的log属性分别设置为1111和2222。
点击上方的save按钮进行保存,每次使用行为树都要利用这个按钮进行保存。
回到场景 选中一个物体,添加组件 -> @egret -> 行为树组件
添加成功后将组件的behaviour设置为刚刚编辑的newBehaviorTree
保存后运行项目。
大功告成!
#自定义节点
您肯定不会满足于只用Egret Pro有限的内置的节点来完成一些简单的游戏行为树AI,显然您学会自定义节点来实现的AI逻辑是至关重要的。下面的内容您将学会 如何新建节点 以及 完成一个简易怪物AI。
#节点生命周期
每个节点都有调用生命周期,