游戏 AI - 4

逻辑越复杂越好吗?

Posted by Kang Cai on July 7, 2020

一种常见的错误是认为游戏中的AI越复杂,玩家对角色的感觉就越好。事实上,创造优秀的 AI 就是要将游戏的要求与正确的行为、以及产生这些行为的正确算法相匹配,在本书中有一系列令人眼花缭乱的技巧,正确的方法并不总是最直观的选择。无数难以实现的复杂人工智能的例子导致了糟糕的,甚至愚蠢的行为。同样,如果使用得当,一个非常简单的技巧也可以是完美的

一、当简单的事情看起来很棒

《吃豆人》是最早的具有任何形式角色的游戏之一人工智能,其中幽灵 AI 有3种状态:一种是玩家收集点数时的正常状态;第二种状态,当玩家吃了电源后会开始复仇行为;最后一种状态是定时触发的,让幽灵后退一点。

在这三种状态中,每一个幽灵都有一个目标。它沿着直线移动,直到它到达一个交叉点,然后选择最接近目标方向的路线。它不会试图计划整个路线,甚至不会检查它的目标是否能到达,而只是朝着目标移动。当追逐玩家时,每个幽灵都有自己的简单代码片段来选择目标:红色幽灵总是瞄准玩家的位置;粉色幽灵的目标是玩家面前的四个正方形空间,即使它在墙的里面或另一边;浅蓝色幽灵则保持着玩家一样的位移;橙色幽灵如果离玩家远则直接锁定玩家,如果近则去转角。所有这些选敌路线都可以用一两行代码实现

这和你能想象的一个移动角色的AI一样简单。再简单一点,幽灵要么是非常可预测的(如果他们总是指向家的话),要么是完全随机的。就其本身而言,幽灵策略是很容易预测的;他们的AI 并不构成挑战。但总的来说,每个幽灵的不同行为足以形成一个强大的对立力量,以至于它们的智能程度直到今天都得到了奉承的评价。例如,最近某网站上对《吃豆人》出现这样一条评论:“为了给游戏增加一些紧张感,游戏中加入了一些聪明的人工智能。鬼魂会聚集起来,攻击玩家,然后散开,每个幽灵都有自己的人工智能”。还有玩家报告了幽灵们的策略:“他们四个设置了一个陷阱,让红色幽灵逼迫玩家进入埋伏,其他三个人在那里等待。”

一个简单的人工智能如果做得好,在玩家看来会比它本身聪明得多

同样的事情也被许多开发自己游戏的开发者报道过。举个极端的例子:几年前《Rebellion》的 Chris Kingsley 提到了一款未出版的“任天堂 Game Boy 游戏”,其中特定的敌人角色会直接进入玩家的身边,但为了变化,他们会在前进的过程中随机地避开敌人。玩家们报告说,这些角色会预测他们的射击模式,并避开挡路。

AI 并没有预料到任何事情,只是在偶然的情况下设法躲开了。但在关键时刻的及时回避会让玩家印象深刻,并塑造了他们对 AI 的看法。

二、当复杂的事情看起来很糟糕

当然,相反的事情也很容易发生。我之前非常期待的一款游戏是《Herdy Gerdy》,这是索尼用来宣传 PS2 硬件中“情感引擎”芯片的新玩法可能性的发行游戏之一。这个游戏是一个放牧的游戏,动物生态系统出现在游戏关卡中,玩家必须将不同种类的动物个体聚集到相应的围栏中。放牧玩法在以前就被使用过,后来也作为一个更大的游戏的组成部分,但是在《Herdy Gerdy》中它构成了全部的游戏玩法。这种类型的AI设计在后面其它篇章中会详细谈到。

不幸的是,动物角色的移动 AI 并不能完全适应它丰富的关卡设计的挑战。因为碰撞检测可能会把它们困在无法恢复的地方,导它们很容易被捕捉到。虽然 AI 卡住在游戏中是很常见的现象,但出现在放牧玩法的动物 AI 身上,使一些动物显得出人意料的蠢。结果不出所料,游戏评价褒贬不一,销量平平。

与《Herdy Gerdy》不同,《Black & White》 取得了巨大的销售成功。但在一些地方,它也遭受了伟大的 AI 看起来很糟糕的影响。这个游戏玩法包括了通过结合例子和反馈来教一个角色做什么:当人们开始玩游戏的时候,他们往往在无意中教会了游戏中的生物一些坏习惯,在最坏的情况下,生物甚至可能无法执行最基本的动作。虽然通过更多地关注生物的学习 AI 是如何工作能让玩家更好地操纵它,但也丧失了调教一个真实生物的沉浸感。

对于开发者来说,使用最新技术和最炒作的算法来实现角色得 AI 是一个难以抗拒得诱惑。在开发后期,当一个正在学习的 AI 仍然无法学会如何在赛道上驾驶汽车而不失控时,更简单的算法就会来拯救它,并将其融入游戏发行版中

知道什么时候该复杂、什么时候该简单是游戏 AI 程序员的编程艺术中最困难的元素,最好的 AI 程序员是那些能够使用非常简单的技术来制造复杂假象的人

当游戏的设计和实现过程之间有一个紧密的反馈循环时(而不是实现严格遵循设计),这就更容易做到。对需求稍加修改就意味着可以使用更好的 AI 技术,从而带来更好的游戏。有时,这意味着简化所需的行为,使其更加健壮。不幸的是,由于在大众市场的 PC 和主机游戏中,团队规模庞大,程序员很难有很大的影响力。独立游戏和手机游戏的团队小得多,但虽然比几年前小了很多,但仍然有更多的机会。

三、感知窗口

除非你的 AI 控制着一个经常出现的伙伴或一对一的敌人,否则你的玩家可能只会在短时间内遇到一个角色。

对于以被击杀为人生目的的一次性警卫来说,出现的时间是非常短的;而更难对付的敌人可以在屏幕上出现几分钟,因为他们的失败是被策划和执行的。

当我们在现实生活中试图理解某人时,我们很自然地设身处地为他们着想。我们观察它们的环境,观察它们从环境中收集到的信息,以及它们正在执行的行动。游戏角色也是如此,一个站在黑屋子里的警卫听到了声音:“我想我会按一下电灯开关。”如果警卫不这么做,我们可能会认为他们很蠢。

如果我们只是瞥了一个人一眼,我们没有足够的时间去了解他们的处境。比如,如果我们看到一个听到噪音的警卫突然转身,向相反的方向缓慢移动,我们就认为 AI 设计得有问题,因为警卫本应该从房间的另一边走到有声音的地方。但如果我们观察他们更久,我们会发现他们的行动是可以理解的,比如他们可能刚好在等同事从门底下塞进香烟,以为噪音是预先设定好的信号。如果我们知道以上完整得信息,我们就会知道这个行动终究是明智的。

这种必输的设计就很好地诠释了“感知窗口”这个概念。你需要确保一个角色的 AI 符合它在游戏中的目的,并能得到玩家的关注。在跑龙套的角色中添加更多的 AI 可能会让你更受少数玩家的喜爱,比如某些忠实粉丝会花很多时间分析每个关卡,但其他人(包括发行商和媒体)可能会认为你的编程很草率

四、行为的改变

感知窗口不仅仅是时间的问题。再想想吃豆人里的幽灵,他们可能不会给人感觉有感知能力,但他们不会做任何不合时宜的事,这是因为它们很少改变行为。

每当游戏中的角色改变行为时,这种改变比行为本身更引人注目。同样,当一个角色的行为应该明显改变而没有改变时,它就会吸引注意力。如果两个警卫站在一起说话,而你射倒了一个,另一个警卫就不能继续谈话。

当玩家在附近或被发现时,行为就会发生变化。这在平台游戏和实时策略中都是一样的。一个好的解决方案是为跑龙套的角色保留两个行为:一个正常的动作和一个玩家发现的动作。