对游戏设计师来说,根据游戏类型和游戏定位来选择合适的游戏AI技术是一个非常重要的问题。目前最为常用的游戏AI技术主要包括有限状态机和行为树。
有限状态机(Finite-State Machine,FSM) [1]是游戏中智能体的智能和行为的常用建模方法之一。它本质上是一个抽象的虚拟机器,用来管理状态的相互变换。它通过将复杂的决策系统抽象为不同的状态以及状态之间的转换,让每个状态只需要管理自己的转换条件,从而降低决策系统的整体复杂度。由于其实现简单且逻辑结构清晰,有限状态机技术被广泛应用到动作游戏的开发中。
有限状态机的实现包含了状态(State)、转换(Transition)以及状态机(State Machine)三个部分。状态描述智能体实际所处的状态,转换管理状态之间的转换条件,而状态机负责检查转换条件以及确定智能体的当前状态。
行为树(BehaviorTree,BT)是Next-Gen AI[2]中提出的一种计划执行的数学模型。它表现为一个有向根树,树中节点被分为控制流程的节点和执行行为的节点。行为树采用深度优先的执行顺序,因此行为树节点的左孩子具有比右孩子更高的执行优先级。行为树在执行时,通过控制流程的节点来决定下一个执行的节点,通过执行行为的节点来做出行为决策。
目前,市场上大量的动作游戏、即时战略游戏、射击游戏等都应用了行为树技术。全球游戏大赏(The Game Awards, TGA)是游戏届最有影响力的奖项之一,表1列举了2011~2019年TGA的年度最佳游戏的类型、游戏平台及其使用的AI技术。如表1所示,其中只有2个游戏还使用着传统的状态机作为游戏AI的基础(当然这也与游戏类型有关),大部分的游戏已经使用了更为先进的行为树来实现游戏的AI功能。其中,《只狼:影逝二度》更是用行为树使游戏中的敌人呈现了逼真且遵循游戏逻辑的智能,后文将会对其具体的应用进行更加深入的分析。
表1 2011~2019年TGA年度最佳游戏类型、游戏平台及其使用的AI技术汇总表
年份 |
游戏名称 |
游戏类型 |
游戏平台 |
AI技术 |
2011 |
《上古卷轴5:天际》 |
角色扮演 |
PC、PS、Xbox |
行为树 |
2012 |
《行尸走肉》 |
冒险游戏 |
PC、PS、XBOX、NS |
状态机 |
2013 |
《侠盗猎车手5》 |
开放世界 |
PC、PS、XBOX、NS |
状态机 |
2014 |
《龙腾世纪:审判》 |
角色扮演 |
PC、PS、XBOX |
行为树 |
2015 |
《巫师3:狂猎》 |
角色扮演 |
PC、PS、XBOX、NS |
行为树 |
2016 |
《守望先锋》 |
射击游戏 |
PC、PS、XBOX |
行为树 |
2017 |
《塞尔达传说:荒野之息》 |
开放世界 |
NS |
行为树 |
2018 |
《战神4》 |
动作游戏 |
PS |
行为树 |
2019 |
《只狼:影逝二度》 |
动作游戏 |
PC、PS、XBOX |
行为树 |
行为树提供了一种以复杂性降序组织行为的分层方法。一个复杂行为可以表示为行为树中的一个子树,而构成该复杂行为的多个简单行为则表示为该子树下更小的子树。行为树通过这种以简单行为来实现复杂行为的方式,可以方便地对行为进行扩展。而且它可以通过节点的层次排布来清晰地表达决策逻辑的走向。
行为树采用树形结构的设计,它由具有不同职责的节点连接构成。根据节点的职责划分,行为树节点可以分为条件节点、动作节点以及组合节点。对于行为树,它的叶子节点只能是条件节点或动作节点,而分支节点必须是组合节点。
叶子节点包括条件节点和动作节点两种类型。条件节点用于向环境查询信息,判断条件是否成立。其节点的返回值包括两种:真(True)和假(False)。条件节点为组合节点提供了控制执行流程的判断依据。动作节点用于描述一个需要执行的动作,其返回值包括三种:成功(Success)、失败(Fail)和执行中(Running)。一般而言,在同一父亲节点的情况下,动作节点会安排在子节点的最右边,即动作节点的执行优先级会比其它子节点更低。作为行为树的叶子节点,动作节点意味着行为树对输入数据进行逻辑分析后的决策结果。因此,动作节点基本是一些已经定义好的请求,如闲置、移动、攻击和回避等等。
行为树的分支节点必须是组合节点,它用于控制行为树的执行流程。组合节点的返回值是由子节点的返回值以及它本身的控制逻辑所决定的。组合节点的返回值包括三种:成功、失败和执行中。返回值中的成功和失败分别与条件节点的返回值真和假相对应。组合节点在执行子节点时,若子节点的返回值为运行中,则重复执行该子节点直到返回值为成功或失败为止。根据控制逻辑的不同,组合节点可以分为三种基本类型:顺序节点(Sequence)、选择节点(Selector)和平行节点(Parallel)。
顺序节点用于顺序执行其子节点。若有子节点返回失败,则本节点返回失败,否则返回成功。其执行逻辑如下:
图1 顺序节点执行逻辑图
如图1所示,顺序节点从左往右依次执行其子节点。动作A的执行取决于条件A和条件B是否成立。只有在条件A和条件B都成立时,动作A才能执行。
选择节点用于顺序执行其子节点。若有子节点返回成功,则本节点返回成功,否则返回失败。其执行逻辑如下:
图2 选择节点执行逻辑图
如图2所示,选择节点从左往右依次执行其子节点。只有在动作A和动作B都返回失败时,动作C才能执行。
平行节点用于并发执行所有的子节点,这表示子节点的执行之间没有条件关系。其执行逻辑如下:
图3 平行节点执行逻辑图
如图3所示,平行节点原则上是所有子节点并发执行的,即动作A、动作B和动作C并发执行。但基于实现方便的考虑,其实现一般采用顺序执行的方式。
通过对以上三种组合节点进行任意组合,可以构建行为树执行流程的控制逻辑。组合节点与其它节点的区别在于组合节点只负责控制行为树的执行流程,其节点信息量较低,不需要考虑具体的数据问题。从组合节点的排列和组合中可以看出行为树的决策逻辑走向,这表现出行为树逻辑可读的特点。
根据上述分析,我们尝试解读一下一些比较简单的AI逻辑,分析其实现的方式。以《战双帕弥什》游戏中的一个怪物“刺钳蝎”为例,它的逻辑大致可以分为以下两个部分,一部分是游荡索敌逻辑,另一部分是怪物行为逻辑。
图4 《战双帕弥什》游戏中怪物“刺钳蝎”示意图
首先,通过观察“刺钳蝎”的行为,可以发现它一般在距离角色5m以上时必定会朝角色移动,在距离2m到5m之间会进行前后左右的游荡行为,在距离角色2m左右的距离就不会再往前移动。游戏AI的逻辑必须与其表现强挂钩,这样的游荡逻辑其实也是遵循了蝎子捕食的游荡逻辑,距离太远则必须靠近,距离较近则在游荡中寻找进攻机会,已经完全在攻击范围内则不需要再向前。
怪物的行为逻辑则一般表现为怪物在什么时候执行什么操作,比如我们可以观察到,“刺钳蝎”在距离5m以外且可以进攻时一定是“飞扑攻击”,在前置技能“左钳攻击”命中时一定会衔接后置技能“右钳攻击”,这些逻辑一样是通过行为树与有限状态机来实现的。
结合上文所述的游荡逻辑与行为逻辑,大致可以构建如图5所示的行为树。图中左边的选择节点代表了游荡索敌逻辑,右边的选择节点代表了行为逻辑。
图5 《战双帕弥什》游戏中怪物“刺钳蝎”行为树图
以上只是一些基础的逻辑分析,如果要进一步研究更加高级的AI逻辑,比如宫崎英高的作品《只狼》中经典的Boss“巨型忍者枭”(以下简称“枭”),就需要更加深入地研究其游荡索敌逻辑与行为逻辑。
图6 《只狼》游戏中Boss“巨型忍者枭”示意图
首先,“枭”的整体表现是非常灵动的,因此可以看出其游荡逻辑并非完全固定,即不是直接用一个固定的选择节点,而是按照优先级来判断其游荡索敌的行为,甚至可以进一步推测“枭”的游荡索敌逻辑应该是结合了一部分行为逻辑的。例如,其前进的游荡行为很多时候是用“突刺型”的技能来代替的,而其后退的行为很多时候由几个“后跳”技能来实现。只有在玩家积极进攻后,“枭”才会进入一段真正的游荡时间。这种行为逻辑与游荡索敌逻辑结合的实现方式,使“枭”的战斗风格更加丰富,不会陷入呆板的游荡循环之中。
其次,“枭”的行为逻辑与一般的行为逻辑也有较大的差别。一方面,“枭”的多个技能之间都做了衔接动作,使技能衔接的可能性大大提高,这也就形成了他丰富的“变招”——攻击技能的不同状态机之间的灵活切换;另一方面,“枭”的大部分技能都带有较远的位移距离,因此其判断条件不会过多地考虑玩家与他之间的距离,而会更多地根据玩家的操作,如“格挡”“垫步”“进攻”等,来调整自己的攻击方式。
“枭”的AI逻辑复杂度相对较高,具体的行为树枝叶太过繁盛,还请有兴趣的读者自行尝试,或与笔者进一步交流。本文在这里给出一个简单的局部行为树示意图,仅供读者参考。
图7 《只狼》游戏中Boss“巨型忍者枭”局部行为树图
图7中行为树的左侧部分主要针对玩家的被动行为,比如玩家在接近或逃离时,“枭”的游荡与进攻所对应的行为逻辑;而右侧部分则针对于玩家的主动行为,比如倒地时要应对“枭”的“处决”技能,比如进攻时需应对“枭”的“弹反”技能。
最后,对本文所描述的行为树的内容进行一个总结:
(1)行为树拥有3种节点:条件节点、动作节点以及组合节点。其中,组合节点又可以分为三种基本类型:顺序节点、选择节点和平行节点;
(2)行为树结合状态机的使用,可以使动作游戏中的怪物(或角色)产生拟人的行为模式,适用于复杂的AI场景;
(3)行为树有利于逻辑的重用,因为优秀的行为树逻辑(如游荡索敌逻辑、技能衔接逻辑等)可以被不同的对象反复地调用。
所有的AI逻辑都是为设计目的而服务的。在明确设计目的之后,结合本文所介绍的行为树设计方法,可以设计出千变万化的AI逻辑,营造丰富多彩的游戏体验。然而,随着决策逻辑的复杂化,行为树的可读性和决策精度会迅速降低,这对游戏设计师的设计工作造成了较大影响。因此,智能算法研究中心对行为树的可读性和决策精度的优化问题进行了深入研究,提出了一种模糊逻辑推理行为树[3],并将其应用到ARPG游戏AI系统,为游戏设计师提供了更优的技术选择。
图8 运用改进的行为树的ARPG游戏客户端场景界面
参考文献
[1] Buckland M.Programming game AI by example[M]. Burlington: Jones & Bartlett Learning,2005.
[2] Champandard A. Behavior trees for next-gen game AI[C]. Game Developers Conference, Audio Lecture, 2007.
[3] 蔡礼权. 基于模糊逻辑推理行为树的游戏AI建模与应用[D]. 广州:华南理工大学, 2017.
[4] Feng S, Xi J, Gong C, et al. A collaborative decision making approach for multi-unmanned combat vehicles based on the behaviour tree[C]. 3rd International Conference on Unmanned Systems (ICUS), 2020.
总编:黄翰
责任编辑:袁中锦
文字:陈尧庚
图片:陈尧庚
校稿:何莉怡
时间:2021年09月03日