游戏AI基础

来源: David''s Blog

游戏AI(artificial intelligence,人工智能)成为近来讨论较多的主题,这是有充分根据的。随着游戏中画质与音效的稳步提高和改善,游戏控制的玩家(game controlled players)的行动不以“聪明的”方式进行变得越来越明显。

比游戏控制的玩家的“聪明”更重要的是他们的愚蠢。多数游戏玩家不期望去运行一款最新的第一人称射击游戏,用射钉枪(nail gun)与莫里亚蒂教授[1]对抗。他们更不希望去对抗一个被复杂的拐弯搞得不知所措的先天性白痴病人。

[1] 英国作家柯南道尔《福尔摩斯探案集》里的人物,被福尔摩斯喻为“犯罪界的拿破仑”。

单位活动AI(Unit Behavioral AI)

游戏AI不总是标准含义上的AI。单位游戏AI是为设计出具有提供某种挑战或某种真实体现的生命特征的一次真正的尝试。

在游戏中,只站在一处、从不移动的警卫会显得非常不真实。不过,如果你创建一个例行程序(routine),使他不时的朝四周张望,或变换他的姿势,他会看起来更具活力。通过创建一个在预设的路径上行走的警卫偶然停在站岗的警卫前,并好像与他谈话这样的情景,真实的体现能被极大地提高。

在单位AI中,动作分为反应性(reactionary)与自发性(spontaneous)两类。

在反应性的方式下,单位随时会对自身环境中的变化做出响应。如果一个敌人发现了你,开始向你跑来,并朝你射击,那么他们已经做出了看到你的反应。

在自发性的方式下,单位做出行动时并不依赖于自身环境中的任何变化。一个单位决定从其所站立的岗哨移向基地周围的某个游动岗哨,则这个单位已经做出了一次自发性的行动。

通过在你的游戏中使用这两种类型的单位活动,你就能创造出你拥有自主“聪明”的单位的假象,而不一定是简单的机器。

反应性AI(Reactionary AI)

反应性输入应当总是基于单位的感觉。当依照人类的特征对AI建模时,你需要考虑单位的视线范围与距离,他们的听觉,如果适用还有嗅觉。

制定警报级别是处理不同感觉输入的一种有效方法。如果一个单位在其视野中直接看到了敌人,那么单位应切换到与如何对抗敌人相符合的警告模式。如果单位没有看到敌人,而是听到了脚步声或枪声,那么单位应转到适用于与间接情景相一致的警报级别。

这里有一个警卫单位的例子。听到枪声时,会使其采取行动去调查枪响的区域;听到脚步声时,可能会使其守候着去伏击移动的单位。所有这些不同类别的活动和警报都能被一个基于规则的(ruled-based)或模糊逻辑的(fuzzy logic)系统所建立,以便你能对每个单位产生的每次声响或目击做出解释,并使他们采取适当的方式做出反应。

一个具有普遍意义的警报也是游戏中真实与智力体现的一个重要因素。假如你一直东奔西跑的朝充满敌人的基地开火,并不断的遭遇新的敌人,而这些敌人对过去持续10分钟的炮火这个事实竟然一无所知,这会显得非常不合适。通过为所有的单位建立一个警报系统(alert system),或一个警报方案(alert plan),能够在你的游戏世界中增强真实的体现。

一个警报方案应该由有警报时各单位应共同遵循的规则组成,而非由无警报情况下的规则构成。例如,如果出现警报,你要能使所有处在安全区域内的单位快速移向基地入口以加强防御。

自发性AI(Spontaneous AI)

在你的游戏世界中,自发性AI对于创建生命的感觉(sense of life)极为重要。如果你遇见的每个人只是站在那里等着你与他们交谈或杀死他们,抑或更糟,毫无目标的漫游,这将不会使玩家非常信服。

解决上述问题(standing around problem)的方法之一是为每个单位设置一组非警报状态时的目标。这些目标可能包括预设移动路径,随机移动到预设区域,当路过其他单位以及与其他单位移动到预设目的地时,偶然停在其他单位旁。在所有的这些情景中,我总是说预设(pre-set),因为除非你提出一个很好的设置目的地与路径的算法,否则你的单位看起来会像是在毫无目的地漫游。

单位行动(Unit Actions)

真正让一个游戏单位看起来很聪明的是他们的行动。如果他们以玩家可能的方式移动,或在玩家可能的情景下做如闪避这样的动作,那么单位看起来会很聪明。你不一定需要很多的动作来创建聪明动作的假象,你只需要包含足够的与你的单位相关联的任何基本情景。

如果你处理的恰当,且包含的范围越广,你的玩家相信你的单位在“聪明地”行动的机会就越大。把自己放在你的单位的位置上,在他们的情景中你会怎么做?你将怎样回应各种各样的攻击或遭遇敌人?如果什么事都根本没发生,你又将会做些什么?

如果你回答了这些问题,并针对你的单位将遇到的每种情景正确的实施了它们,你将把你拥有看似聪明的单位的机会最大化,这也是创建一个优秀的、稳健的游戏AI的第一步。