1 了解行为树

首先制作AI有很多种决策方式,比如 有限状态机(Finite-State Machines),分层状态机(Hierarchical Finite-State Machines),行为树(Behavior Trees),效用系统(Utility Systems),目标导向型行动计划(Goal-Oriented Action  Planners),分层任务网络(Hierarchical Task Networks) ,不同的决策方式针对不同的游戏行为,各有优缺点,可以择优选择,我们为什么要选择行为树呢?行为树中的可扩展性是最优的,且灵活性可以适应任何不同的AI情况,其随机性非常可视化判断与调试,但是行为树显而易见也有部分缺点,比如大量判断耗时,且不一定是最优决策选择。

2 走进行为树

行为树的每一个叶子 我们都称为节点,通过一个个节点来搭建一个树结构,即数据结构的树结构。通过树结构的中序遍历来将所有节点串联在一起。其中没有下一个节点的称为 子节点,有下一个节点的 称为父节点。

子节点 又分为 行为节点、条件节点。 父节点 分为 装饰节点、组合节点。其中在Unreal Engine中 条件节点被结合在 装饰节点中。

通过这四种节点的不同排列组合 构建成了一颗行为树。

3 搭建行为树(基于unity的Behavior Designer行为树插件)

每一颗行为树都是从根节点开始

游戏AI之行为树的入门使用(一)

接下来要新建一个父节点,我们一般新建一个组合结点中的顺序节点,要行为树从子节点按从左到右执行。比如:

游戏AI之行为树的入门使用(一)

接下来只要搭配子节点就完成了 一个简单的行为树

游戏AI之行为树的入门使用(一)

这里有一个父顺序节点,一个条件节点一个动作节点 共同构成一个子节点。这里表示满足条件节点的条件就执行该动作节点的动作。

4 编写节点

4.1 编写父节点 

编写装饰节点 需要继承Decorator  重写CanExecute 来判断子节点是否成功与失败 重写Decorate来判断自己是否返回成功与失败 例如:

游戏AI之行为树的入门使用(一)

编写组合节点 需要继承Composite  组合节点比较复杂,大体需要控制所有子节点的返回来确定自己的成功失败返回值,通过重写OnChildStarted(int childIndex) 来返回子节点编号,

重写CanExecute()来判断子节点是否成功与失败来继续执行下一个节点,重写OverrideStatus来判断自己是否返回成功与失败 例如:

游戏AI之行为树的入门使用(一)

编写子节点 

编写条件节点 需要继承Conditional 只要重写OnUpdate 来判断条件,选择返回值即可 比如:

游戏AI之行为树的入门使用(一)

编写行为节点 需要继承Action  只要重写OnUpdate 来执行行为,选择返回值即可 比如:

游戏AI之行为树的入门使用(一)

 

 

后续继续学习就看下章

游戏AI之行为树的入门使用(二)

相关文章: