怪物行为树案例_行为树AI

#概述

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。

#节点生命周期

每个节点都有调用生命周期,

你可能感兴趣的:(怪物行为树案例)