Unity3D游戏开发之游戏AI的综合设计技能详解
AI(Artificial Intelligence,人工智能)作为游戏的重要组成部分,对游戏的可玩性起着日益重要的作用。如今,玩家已不再满足于行为单一的敌人和NPC,而是渴望见到能像人类一样思考的虚拟角色。本文将首先介绍游戏中常见的人工智能技术,然后综合运用这些技术设计一个较为通用的AI引擎。
常见的游戏人工智能技术
有限状态机(FSM)
有限状态机是游戏中最为常用的人工智能技术,其他多数技术基本都依赖于有限状态机的支持。它将单位的行为抽象为若干种状态,在特定条件下,这些状态之间能够相互转换。例如,敌人初始处于巡逻状态,当玩家靠近时,会转换为追击状态;当玩家远离后,又会恢复到巡逻状态。单位的AI可以通过一张状态图来表示。
模糊逻辑(Fuzzy Logic)
模糊逻辑是布尔逻辑的扩展。在布尔逻辑中,“是”和“否”是绝对的;而在模糊逻辑中,存在“有点是”“不怎么是”“非常是”等程度上的区别。以之前的例子来说,玩家靠近处于巡逻状态的敌人,这种“靠近”就是一个模糊的概念。运用模糊逻辑后,敌人对于“靠近”的判定距离并非固定,有时认为距离3米就算靠近,有时则认为距离2米才算靠近。
模糊状态机(FuSM)
将模糊逻辑与有限状态机相结合,便产生了模糊状态机。在模糊状态机中,单位并非绝对地处于某一种状态,而是同时处于几种状态,只是每种状态所占的比重不同。
智能地形(Smart Terrain)
智能地形是为地形赋予特殊的信息,这些信息可用于AI寻路、伏击等战术。例如,CS中的路径点(Way Point)就是一种智能地形。与之类似的还有智能物品等。
A*寻路算法(A Star Path Finding)
A*算法被证明是最高效的寻路算法,在寻路领域得到了广泛应用。它是对迪杰斯特拉算法的改进,网上有许多关于该算法的详细资料。
脚本系统(Script System)
脚本系统通常是游戏引擎的组成部分,也可视为AI的一种技术。例如,DOTA使用的是WarCraft的引擎,地图编辑者借助地图编辑器为DOTA中的各个英雄编写不同的JASS脚本,使得英雄们具备了一定的AI。目前,最流行的脚本语言是Lua脚本,像WOW就采用Lua作为脚本语言。
遗传算法(Genetic Algorithm)与神经网络(Neural Network)
这两种技术属于较为高级的AI技术,都具备机器学习和进化的特性。然而,在实际游戏中,它们的应用并不广泛。这是因为游戏中的单位通常无法获得足够的学习机会,而且学习结果难以控制,容易出现意想不到的情况。
游戏AI引擎的设计
游戏中的AI引擎需要综合运用上述技术,并且要与渲染、物理模拟等引擎部件协同工作。在设计AI引擎之前,我们先来了解一下人类大脑的结构。
AI引擎结构设计
模拟人脑结构来设计我们的AI引擎结构,各部分通过消息系统连接起来,并对外公开接口API。以下是整体结构图(此处虽未给出图,但可在后续补充)。
系统工作原理
物理部分
物理部分由物理引擎负责完成,主要包括碰撞检测、碰撞反应等功能,并保存着物体的坐标等物理信息。某些碰撞信息会通知感知系统,这类似于单位的触觉。
感知系统
感知系统在不同单位中的表现差异较大。例如,最简单的敌人可能没有任何感知能力;稍复杂的敌人可能拥有视觉,能够发现其前方的玩家,此时玩家可以绕到敌人身后进行偷袭;更复杂的敌人可能拥有听觉,当玩家在其身后偷袭并打碎物品时,敌人也能察觉。在魔兽争霸中,单位可以感知附近的敌人,一旦发现敌人进入一定区域,就会自动发起攻击。感知系统可以直接决定单位的行为,类似于条件反射。例如,“受到伤害”的感觉会使单位自动逃避伤害,即便这个单位没有高级决策能力。
决策系统
决策系统是单位的高级AI,单位能够综合感知系统提供的各种信息以及其他单位下达的命令做出判断。这些命令可以是玩家的输入,也可以是团队指挥者(同样是一个AI单位)下达的。例如,在DOTA中,一个AI英雄会综合衡量自身的生命值、攻击力以及对方的生命值等因素,然后决定是否与对方进行PK。决策系统可以运用有限状态机、神经网络等技术,同时也可以让单位具备学习功能,但实现平衡的学习功能具有一定难度。
行为控制
决策系统直接指挥单位的行为,如攻击、移动或跳跃等。单位的行为可以由有限状态机进行管理。此外,在较为复杂的游戏地图中,决策系统有时需要导航系统将“前往某处”的指令分解为“先到哪,后到哪”,进而控制单位的具体行为。
至此,整个AI引擎已较为完善,并且在各种类型的游戏中具有较高的通用性。可以将AI的整体框架集成到游戏物体基类(GameObject类)中,各派生类通过继承并重写关键方法,从而展现出不同的智能表现。