浅析游戏AI的原理与实现

目录

一、什么是游戏AI

二、为什么需要游戏AI

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

        1.朴素AI

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

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

        4.行为树(Behavior Tree,BT)

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

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

        7.机器学习(Machine Learning)

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

五、总结与展望

  • 一、什么是游戏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所示

图表 1有限状态机

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

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

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

图表 2分层有限状态机示意

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

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

图表 3分层有限状态机举例

        4.行为树(Behavior Tree,BT)

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

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

图表 4行为树示例

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

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

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

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

行为

先决条件

执行效果

体力消耗(Cost)

用锤子锤开锁

有锤子

打开锁

30

用锤子锤开箱子

有锤子和箱子

打开箱子(有钥匙)

10

用钥匙开锁

有钥匙

打开锁

5

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

图表 5目标导向的行为规划

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

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

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

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

        7.机器学习(Machine Learning)

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

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

图表 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展现出更加真实的一面,更好地服务于玩家的游戏体验。

  • 3
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值