浅析游戏AI的原理与实现

135次阅读

一、 什么是游戏 AI

严格意义上来讲,与其他领域的 AI 相比,许多类型的游戏 AI 实际上都不能称之为 AI。大多数游戏里的 AI 实际上只是一些能够给玩家带来一定智能程度的“错觉”的智能体。所以,简单来说,游戏 AI 就是游戏中那些非玩家控制的游戏角色,也就是 NPC 的行为逻辑。

二、 为什么需要游戏 AI

在游戏中,虚拟的游戏角色的行为深刻影响着玩家在游玩这个游戏时候的感受,而游戏 AI 决定了这些虚拟游戏角色背后的行为逻辑。这种行为逻辑真实与否,直接影响了玩家的游戏体验。

打个比方,艾尔登法环中的许多敌人都有一个“药检”系统,敌人一旦检测到玩家使用元素瓶,敌人就会发了疯似的来打断玩家。单从这一点来看,这不是一个优秀合理的游戏 AI。甚至因此有玩家调侃到,哪怕你在元素瓶的物品描述上加上这样一句话——使用元素瓶这件事在交界地被视为是最恶劣的嘲讽方式,都能使这一事件合理。由此可见,游戏 AI 对于玩家的游戏体验起到重要作用。

三、 游戏 AI 的主要实现方式

1. 朴素 AI

游戏 AI 最简单的实现方式,就是用 if else 这类的简单分支语句对 NPC 的行为进行分类和判别。

打个比方,有一个敌人在巡逻,我们可以用朴素 AI 为他添加一些规则:

  • 如果视线内没有人就巡逻

  • 如果视线内有玩家就攻击

  • 如果生命值降为 0 就死亡

看上去好像没有什么问题,但是如果玩家接近这个 NPC,之后又离开了这个 NPC 的视线呢?这个敌人就会在攻击结束后和没事人继续回去巡逻,这显然不符合常理。而且实际上游戏中的情况远比这种情况要复杂,虽然单纯使用这种简单的分支语句,在理论上也可以通过各种嵌套实现很复杂的行为逻辑,但且不说这段代码有多让人头疼,最主要的是其代码的复用性太差,每个不同类型的敌人都要从头构建一个新的行为逻辑,所以这里我们要引入有限状态机。

2. 有限状态机 (Finite-state machine,FSM)

有限状态机是将游戏内 NPC 的各类行为抽象为几个状态,再通过事件将不同的状态相互连接,组成一个状态机。在某个特定事件发生时,状态才将进行转换。

还是以刚才巡逻的敌人举例,我们可以将这个敌人分为巡逻、警戒、攻击、死亡四个状态,再通过一些事件进行连接,如图 1 所示

浅析游戏AI的原理与实现插图
图表 1 有限状态机

在有限状态机下,通过很简洁的代码就可以实现复杂的行为逻辑。并且最重要的是,代码可以封装复用了,不同类型的单位可能只需要修改几个切换状态的条件,大大降低了工作量。

3. 分层有限状态机 (Hierarchy-FSM,HFSM)

分层有限状态机是有限状态机的进阶版。随着 NPC 的行为逻辑越来越复杂,有限状态机也有点不够用了,于是就需要分层有限状态机。

浅析游戏AI的原理与实现插图1
图表 2 分层有限状态机示意

在分层有限状态机中,每个状态都可以包含多个子状态,而子状态仅可以与同状态下的子状态之间切换,不同状态下的子状态之间是不可以切换的。

还是以刚才巡逻的士兵为例,我们给他的巡逻状态分为巡逻和休息两个状态,攻击状态分为攻击和防御两个状态,这样这个警卫的状态图如下(省略了图 1 的部分内容)

浅析游戏AI的原理与实现插图2
图表 3 分层有限状态机举例

4. 行为树 (Behavior Tree,BT)

行为树是树状的数据结构,每个节点都代表了一个行为,每个行为都可以有子行为。所有行为都有个先决条件,也就是产生这些行为的条件。每次从根部节点开始遍历,检查每一个先决条件,满足先决条件的节点会继续判断执行它的子节点,而如果一个节点的先决条件并不满足,则会跳过它的子节点,判断它的兄弟节点,直到整个树遍历结束,再从根部节点开始遍历。

与状态机不同,行为树的节点与节点之间的联系较少,增加与删除节点对其他节点都没有什么影响,增加了它的灵活性与可扩展性。而且,可以通过在先决条件中添加随机因素来很好的实现随机性,更适用于一些动作游戏中 boss 的攻击逻辑等。

浅析游戏AI的原理与实现插图3
图表 4 行为树示例

但是行为树的设计思路更加接近机器的思维,而且因为其每次运行都要从根部节点开始,其决策判断时间也要比状态机更长。

5. 目标导向的行为规划(Goal-Oriented Action Planning,GOAP)

目标导向的行为规划,要先给 AI 一个(或多个)目标,再给 AI 提供多条可执行的行为路径、对世界因素的描述、每个路径行为执行的先决条件、以及执行行为对世界产生的影响效果等等。然后 AI 要根据这些因素,找到一个最佳行为队列,并按顺序执行。

举个例子,一个 AI 被关在一个带锁的笼子里,笼子里有一个小锤子和一个玻璃箱,玻璃箱里有钥匙。给 AI 的目标是离开这个笼子,AI 可以执行的行为和先决条件如下:

浅析游戏AI的原理与实现插图4

AI 在遍历所有行为后,可以得到两条路径:

浅析游戏AI的原理与实现插图5
图表 5 目标导向的行为规划

经过计算两种路径的体力消耗,先用锤子锤开箱子再用钥匙开锁的消耗小于直接用锤子锤开锁的行为消耗,AI 确定前者为最优解并执行。这种决策方式更加接近人类的思考方式。

6. 协同多智能体 (Group AI&Meta AI)

以上所列举的这几种方式,已经基本可以满足单一 NPC 的绝大部分需求了。但是,实际的游戏环境中大多并不是单一智能体,而是同时有多个智能智能单位,这些智能体之间的行为联动也是游戏 AI 的一部分。比如在某些潜行类游戏中,一个 NPC 发现什么响动,通常会带动他周围的好几个敌人同时警觉,并一起前往发出声响的地方搜查,这就是 Group AI 在起作用。

而对于 NPC 更多、场景更复杂的情况,我们就需要 Meta AI,它的作用是对场上的所有 AI 进行指挥调度,就好像是坐在幕后的“导演”,用蓝牙耳机告诉场上的 NPC 在什么时候该去哪干什么事,从而实现更加可控的玩家体验。

7. 机器学习 (Machine Learning)

说了这么多方法,其实都与真正意义上的人工智能关系不大,那么有没有游戏 AI 真正用到了人工智能方法呢?答案是肯定的,这里我们以 rct.ai 开发的“混沌球”算法为例。

首先让我们从整体架构的角度来看看基于混沌球的叙事方式与传统叙事方式的不同:

浅析游戏AI的原理与实现插图6
图表 6 混沌球叙事

混沌球与传统的叙事方式的区别在于,他们将“事件”替换为一个又一个明确定义了入口和出口的黑盒,这可以简单理解为,在每一个切片的混沌球里,开始和结局(一个或者多个)是确定的,但是玩家每一次如何从开始到达结局,则是混沌的,是路径不明确的。这个路径只有当玩家不断的和虚拟世界里的虚拟人物 NPC 作出交互,这些 NPC 根据深度强化学习训练后的模型作出动态且实时的反应来推动剧情发展之后,才会被确定下来。这似乎有点像之前提到的目标导向的行为规划,但是 NPC 的路径选择是根据强化学习训练后得到的。

四、 游戏 AI 与其他行业 AI 的区别

游戏 AI 与其他行业 AI 最主要的区别,就是游戏 AI 的设计目的是用于服务人类玩家, 是为了给予玩家一个尽可能好的游戏体验,这也是为什么前面一直都没有提到大名鼎鼎的 AlphaGo。从设计目的的角度来看,AlphaGo 不能算得上是游戏 AI,它的存在从来不是为了服务玩家,而是要打败玩家。DeepMind 公司的目的不是为了让围棋这个游戏更好玩(他们甚至让围棋变得更无聊),而是测试自家的 AI 有多么强大的计算能力和学习能力,围棋只是一个工具而已。

所以,游戏 AI 在与玩家对抗时,一定要满足合理性与公平性。比如敌人不能发现自己视野以外的单位,不能让玩家觉得 AI 作弊了(但是 AI 的确会作弊来获取信息,而获取这些信息不是为了击败玩家,而是为玩家提供更好的服务)。文章开头提到的艾尔登法环中一些读指令的行为,就会让玩家有一种出戏的感觉,降低游戏的沉浸感与真实性。

而且,有些时候为了增加游戏的沉浸感和多样性,抑或者仅仅是为了降低游戏的难度,游戏 AI 不仅不能太聪明,甚至还要装傻。比如许多射击游戏中敌人的第一枪永远打不中玩家,或者在 AI 的决策中添加随机性,让 AI 也可能会犯错,露出破绽等等。

五、 总结与展望

游戏 AI 发展至今,已经有了一套相对成熟的方法,而今后游戏 AI 的发展,更多的是朝着非定性 AI 的方向发展,使用如今前沿的 AI 技术,诸如神经网络、遗传算法、NLP 等等技术,让游戏 AI 展现出更加真实的一面,更好地服务于玩家的游戏体验。

原文链接:https://www.bilibili.com/read/cv18143291

正文完
 
不知道
版权声明:本站原创文章,由 不知道 2023-08-15发表,共计3276字。
转载说明:声明:本站内容均来自互联网,归原创作者所有,如有侵权必删除。 本站文章皆由CC-4.0协议发布,如无来源则为原创,转载请注明出处。