行为树实战训练营-行为树详解、实战 世界微动态
来源:哔哩哔哩     时间:2023-03-09 08:54:13

前言

今天给大家分享的是行为树实战训练营。我们会以空洞骑士的BOSS AI为例,为大家介绍行为树的系统实现

行为树,在游戏行业当中是我们实现游戏AI的一种方式。除此之外,我们还可以使用最简单的如:switch case、 if else实现最基本的游戏AI;复杂一点,我们可以使用状态机、分层状态机来实现游戏的AI


【资料图】

行为术在游戏AI的实践实现上,有它自己的优势。我会给大家分别介绍,各种游戏AI的实现方式。给大家做一个清晰的比较,帮助大家去选择适合自己游戏项目的游戏AI实现方式。

版权声明

本文为“优梦创客”原创文章,您可以自由转载,但必须加入完整的版权声明

点赞、关注、分享可免费获得配套学习资源

点击观看完整视频

行为树详解

行为树:以模块化方式描述任务之间的切换

所谓的行为树,就是把一个怪物的行为拆分成若干个子行为。比如说,一个怪物的行为,拆分成攻击和巡逻等

详细的案例分析,请参考行为树实战训练营视频公开课

行为树的节点类型

行为树是由一个一个的节点构成的。我们对每一个节点赋予一定的功能。行为树的节点可以分成两大类:

控制节点

一棵行为树,所有的控制节点都是这棵行为树上的做非叶子节点

把行为树看成是一棵树,顶端的节点是树根,所有下方的绿色节点可以看作是树枝或者树干,灰色节点是叶子节点,所有的树枝或者是树干节点,我们都叫它控制节点

控制节点在行为树里面又可以分成两类,一类叫做组合节点,另外一类叫做条件节点

动作节点:

叶子节点相当于一棵树上的树叶,我们知道树叶是不会再分叉,它是这个整棵树的最末梢的节点

叶子节点代表了程序当中一个个的动作

行为树要点

行为树是由节点构成的,每个节点要想运作起来,它都必须要要有一个节点的状态,每个节点都必须处于处于三个状态之一:

Running,表示程序正在执行这个节点

Success,每个节点它可能会有一个执行结束,比如巡逻状态,目标从a点走到B点,如果已经走到B点,那么这个状态就是处于一个成功的状态

Failure,有一些节点是用来执行判定的。它可以判定当前这个角色是否看见敌人,如果看见,就是成功;如果没看见,就是处于失败状态

在真正的开发行为树的时候,我们通常不会直接使用那些现成的行为树节点,而是要对行为节点进行定制,在我们的训练营里面会带领大家去定制一个一个的行为树节点

节点可以进行组合,比如要完成一个NPC的一个攻击的AI

它需要先有一个检测节点检测附近是否有可以攻击的目标

当出现目标,需要追击这个目标,当目标处于可攻击范围,要对目标释放技能

一个组合节点,它包括了检测目标,移动到目标,实施攻击,三个子节点构成

3. 组合节点是怎样执行的?

组合节点执行的顺序:

从左到右

Priority/Random  Selector除外

行为树常用控制节点简介

顺序节点

每一个节点,它都有运行成功或失败的状态,如果第一个节点运行成功了,它就会按照顺序去执行第二个节点,如果第二个节点也运行成功了,它就会执行第三个节点,如果这三个节点都执行成功了,那么就说明这个顺序节点执行成功

顺序节点的应用

当要实现的逻辑需要按照顺序执行时

顺序节点的逻辑关系类似于C/C++程序里面的与运算

2. 选择节点

相当于逻辑运算的或运算

如果选择节点当中的某个节点执行失败了,它会不会造成选择节点失败?

不会造成选择节点失败

如果第一个节点执行失败了,它会继续运行第二个节点;第二个节点如果运行失败,也不会造成选择节点失败,它会运行第三个节点

三个节点里面,当有一个节点运行成功,就说明这个选择节点的运行是成功的

3. 并行节点

程序当中同时执行多个行为的行为就是并行行为,这个时候可以用定型节点进行执行。当有N个子节点时可以通过添加一个并行节点,让他们并行执行

4. 装饰器节点

装饰节点,可以理解成一个修改节点。它会对一个节点的行为进行修改

类似于程序当中的否运算,比如原本一个节点的运行结果是成功,当给它做一个修饰节点之后,可以反转节点,把一个运行成功的节点反转成运行失败

装饰节点除了可以反转节点外,还可以重复执行节点,重新尝试节点,然后超时节点,强制失败节点

行为树实战

请用行为树实现以下敌人AI

当敌人看见玩家:

敌人进入追击状态

当敌人看不见玩家:

敌人进入巡逻状态

应该如何实现?

首先Entry表示敌人状态机的入口,然后进入到这个的selector

选择器,相当于或运算,如果前面的节点执行失败,那么就执行后面的节点,不会造成整个这个节点全部执行失败

节点的执行是按照优先级,从左往右排部的,首先它会执行左边Sequence顺序节点

顺序节点必须要一个一个执行,前面的执行成功才执行,如果前面的执行不成功,那么这个顺序节点就执行失败

数据节点执行失败,那么选择器节点就会选择另外一个分支来进行执行。

敌人的行为数假设为行为数,那么程序会怎么走呢?

首先选择器开始,走左边分支走到顺序节点,判定是否发现敌人,如果发现了,就会顺序的执行追击功能

如果没有发现敌人,那么这个顺序节点就执行失败了,执行失败以后就返回回去,然后选择器就会选择巡逻状态来进行执行

2. 行为树看上去一切都很完美,是否是这样?

如果在这个行为书里面,我们不做特殊处理,那么当前面Sequence顺序节点分支没有发现这个敌人,那么sequence这个分支执行失败了。那么选择器就会选择右边节点进入巡逻节点,进入巡逻节点以后,它就会卡死在这个状态永远跳不出

即使在巡逻状态,也要执行左边这个分支。发现敌人节点的检测工作要一直执行,并且这个节点状态为true的时候,按顺序能够把巡逻节点给中断掉。让它中断掉再切回到顺序节点,发现敌人以后进入到追击状态

完美的行为树

必须能在巡逻和追击节点之间正常的切换

节点之间的切换需要利用行为树组合节点的ConditionAbort,中断机制

组合节点的中断机制

四种中断类型

None:不会产生中断

Self:当前组合任务还没运行完,所有子任务的OnUpdate会继续运行,检测是否发生中断

Lower Priority:同层且比自身优先级低级的任务还没运行完,所有子任务的OnUpdate会继续运行,检测是否发生中断

Both:Self+Lower Priority

请用行为树实现以下敌人AI

需要在行为树的Sequence节点设置打断,并且打断类型是Both

设置Both后就能满足行为树在追击和巡逻之间切换。具体可以分成两种情况来讨论:

看见敌人时:

行为树会执行黄色的分支,选择器选择左边Sequence节点,因为发现敌人因此进入到追击状态。

由于Self可以打断自身,它会一直不停的监控这个发现敌人这个条件节点。当这个条件节点为假时,Sequence节点可以打断自身的追击节点的执行,使Sequence节点进入失败状态,从而就进入到巡逻状态

看不见敌人时:

由于看不见敌人,发现敌人就为假,会造成Sequence失败,于是进入到巡逻状态

由于Sequence节点设置了Both,因此既能监控也可以打断自身的子节点追击,同时还可以打断比它低优先级的巡逻

节点会持续的监控是否会发现敌人,当敌人被发现的时,它会打断sequence右边比它低优先级的巡逻节点从而进入到追击状态

3. 中断类型设置Both后,左侧分支在看见敌人的情况下可以打断追击进入巡逻;在看不见的情况下可以打断巡逻,进入追击,这样就能实现一个完美的行为数

小测验

若将Sequence节点的中断类型设置为Lower Priority会有什么问题?

这个问题就不提供答案了,如果大家有什么不明白地方可以加一下文末的Alice老师,然后进群讨论,或者加我为好友讨论问题都是可以的

注意

Conditional Abort,只能由条件节点发起

Conditional Abort可以被任何的组合节点获取

行为树的优缺点

优点

易于理解并且可以使用可视化编辑器进行创建

很大的灵活性,非常强大,并且非常容易对其进行更改

能够创建由简单任务组成的非常复杂的任务,而不必要担心简单任务是如何实现的

每个行为逻辑互不影响,行为模块间的耦合度相对较低

2. 缺点

行为树的选择并不是最优的,结果也不一定是我们想要的。而且决策每次都要从根部往下判断行为节点,比状态机要耗费时间。每次决策都要经过大量的条件判断语句,会变得非常慢

如果AI对象就只有3个或以下数量的状态,用行为树设计的话,计算量会更大,反而会更耗费性能

面试与进阶

当面对一个客户端开发,包括服务器开发,因为游戏的AI也可以写在服务器上

如果是状态同步的游戏,写在服务器上,如果是真同步的游戏,是写在客户端上面

关于状态同步和帧同步的内容,我们的V I P课程里主程进价的项目框架是同时支持这两种数据同步模式的教学

2. 在我们进行面试和这个进阶的商业项目的应用开发的时候,我们需要去根本从根本上去理解底层,够熟练的运  用行为树:

理解行为树底层原理

能熟练运用行为树

能熟练拓展行为树节点

能熟练增加行为树节点

阅读过至少一种行为树系统源码

能够自己实现行为树框架

基于行为树的AI框架

3. 行为树的底层原理,我会在我们的VIP课程里面做行为树的源码解析,感兴趣的同学可以添加文末Alice老师的联系方式,并加入到我们的VIP课程当中去

写在最后

本文为“优梦创客”原创文章,您可以自由转载,但必须加入完整的版权声明

更多学习资源请私信我获取(企业级性能优化/热更新/Shader特效/服务器/商业项目实战/每周直播/一对一指导)

点赞、关注、分享可免费获得配套学习资源

标签: