游戏AI的综合设计AI(ArtificialIntelligence)作为游戏的重要组成部分,对游戏的可玩性起到越来越大的作用。玩家早已不满足傻瓜似的敌人和NPC,渴望见到能像人一样思考的虚拟人物。本文首先介绍游戏常见的人工智能技术,然后综合利用各种技术设计一个较为通用的AI引擎。有限状态机(FSM):有限状态机是游戏中最常用的人工智能技术,其他技术基本都需要有限状态机的支持。有限状态机把单位的行为抽象成若干种状态,在一定的条件下状态之间可以相互转换。例如,敌人开始处于巡逻状态,当玩家靠近时,转换成追击状态,当玩家远离后,又恢复巡逻。单位的AI可以用一张状态图表示。模糊逻辑(FuzzyLogic):模糊逻辑是布尔逻辑的扩展。布尔逻辑中“是”和“否”是绝对的,而模糊逻辑中会有“有点是”、“不怎么是”、“非常是”的区别。例如上例,玩家靠近巡逻状态的敌人,这种靠近就是一种模糊的概念。使用了模糊逻辑后,有时敌人认为距离3米就算靠近了,有时认为距离2米才算靠近。模糊状态机(FuSM):结合模糊逻辑和有限状态机,就产生了模糊状态机。模糊状态机中,单位不是绝对的处于某种状态,而是同时处于几种状态,只是每种状态的比重不同。智能地形(SmartTerrain):智能地形是给地形赋予特殊的信息,从而用于AI寻路、伏击等战术。CS中的路径点(WayPoint)就是一种智能地形。相似的还有智能物品等。A*寻路算法(AStarPathFinding):A*算法被证明是最高效的寻路算法,在寻路中被广泛应用。A*算法是对迪杰斯特拉算法的改进,详细资料网上有很多。脚本系统(ScriptSystem):脚本系统应该是游戏引擎的组成部分,但也可以算作AI的一种技术。例如DOTA使用的是WarCraft的引擎,地图编辑者使用地图编辑器为DOTA中的各个英雄编写不同的JASS脚本,英雄们才有了一定的AI。目前最流行的脚本语言是Lua脚本,WOW就是使用Lua做脚本语言。遗传算法(GeneticAlgorithm)与神经网络(NeuralNetwork):这二者属于较为高级的AI技术,都具有机器学习,进化的性质。但是,实际游戏中应用的并不多,因为游戏中的单位通常不能接收足够的学习,学习的结果也不好控制,容易出现意想不到的情况。游戏中的AI引擎就是要综合利用上述技术,并且要与渲染、物理模拟等引擎部件配合。首先我们了解一下人类大脑的结构:人脑作用脑干呼吸、血液循环等生命中枢小脑平衡运动区动作感觉、视觉、听觉、嗅觉区各种感受额叶高层大脑功能颞叶记忆模拟人脑结构,设计我们的AI引擎结构:AI作用技术物理模拟碰撞检测、碰撞反应物理引擎完成导航寻路A*算法、路径点动画渲染渲染有限状态机、渲染引擎完成感知器感知脚本系统、智能地形、智能物品决策器决策脚本系统、有限状态机、模糊逻辑记忆器学习神经网络、遗传算法、脚本系统各部分可以用消息系统连接起来,并且对外公开接口API,下面是整体结构图:文章主要介绍了在不重写AI程序和不投资昂贵的中间设备的情况下,如何使NPC的AI出现的更智能。脚本处理我们往往相信一个游戏有大量的数据就能有非常好的AI。但是设计者往往把AI设计的就像一面墙的衬托一样,只是傻傻的站在哪里。其实AI在进入战斗前的设计和战斗中一样重要。我最欣赏的就是NOLF游戏的AI脚本。在10码内如果没有任何障碍物的话,你根本无法接近一对正在对话的AI。但是它给它的游戏人物加了太多的通过AI的方法了。AI的范围移动会叫他们看起来更智能。Ai在战斗前顺着墙走动或者看到你了从墙角大喊过来更多的帮手。等等这些其实也是脚本设计的,但是玩家会认为他们很智能。甚至设置AI的巡逻路线或者循环走动效果这些都会使AI看起来更智能。反馈(主要是玩家从AI对话中得到的反馈)AI不应该愚蠢到告诉玩家他们要做什么。在半条命中,敌人往往在扔手雷之前就大喊出来“小心手雷”,当他们喊出来小队左翼进攻,AI往往一会儿就跑到左边。如果玩家从AI的喊话中就知道AI要干什么,这样玩家就会觉得很没意思。AI的动作没必要完全的告诉玩家,AI其实只需要说他们要移动了,玩家就会去猜想AI到底去干了什么,会认为AI很智能。几率性当玩家打的比敌人还要准确的时候,如果敌人还拿着枪站着但是不去冲锋(当然蹲点的境况除外),直接导致的结果就是AI看起来很傻。当玩家意识到那些AI只会傻傻的站在那里,并且很容易的就被爆头,玩家对这款游戏的热情将会大减。如果你要设计这个AI的命中看起来更可信,如果他们用自动武器,然后他们发射散弹并且有的散弹会打不中。千万不要把设计范围升级成以玩家为中心的圆形范围,因为那样做太明显了。如果玩家站着不动看着AI,AI就应该立刻攻击玩家。死亡时间你可以在游戏世界里设计这个AI非常智能,可以自动寻找目标,巡逻范围也非常广。但是这些都要在玩家杀死敌人之前奏效才能看起来更智能。光环这个游戏就把AI分成简单模式和传说模式两种。传说模式中AI有更多的生命值。这就意味着AI能够存活更长时间并且去做一些看起来更酷更智能的事。并且可以更准确的做出更多伤害,这点我之前指出过。当然增加生命值并不是唯一一种增加AI存活时间的方式。请看下面例子。AI可以用闪光弹一类的东西叫玩家很难发现他们,把玩家的武器伤害命中等降低,太厉害的武器并不是件好事。允许AI攻击加强和加速形式的狂暴。如果狂暴时间过长玩家就需要寻求一种方式叫AI不再狂暴。不狂暴以后剩下的攻击也就正常了。多个AI同时攻击,意思就是当其中某一个单独的AI死了以后,其他的人会一拥而上。无BUG如果你必须从很智能但是BUG超多的AI和一般只能但是没BUG的AI中选择一个,我一般会选那个一般智能的。任何适合一个AI都可能做错路或者做点什么不可预知的事情(在那条走错的路上),这种情况严重影响了AI出现的智能化。半条命2中AI的组合战斗就非常简单但是确很有效。他们最基本的动作就是向前走,如果你在他们的视线范围内就攻击你。他们需要再行动时候,他们就会先去一个地方藏起来,然后再行动。粗略计算了一下,80%的联合行动的AI都会在一起行动。因为这样行动出现BUG几率很小,并且玩家可以针对AI的活动习惯建立一种思维模式。当AI的行为能够满足玩家的预期想法,这个AI就会被认为是很智能。当然能超出预期效果会更好。但是AI往往不能满足玩家的想法。预期值因为玩家往往抱着很大希望来玩游戏,所以设计AI是很难的。我们每天都在于别人交流,所以AI的设计也需要来源于人们的生活经验,像电视,电影,各种各样的事,外星人,动物,机器人等等。所有的这些东西出现的都非常智能,就是因为我们实现并不知道或者认为它们很低级。没人知道一个正在阔步行走的人在他开始战斗前的具体行动。你只能从他移动的方式方向来推断他的下一步动作。如果连个阀门都会出现意想不到的动作,那么这个AI看起来就相当的智能了。如果光环游戏中的猪猡怪被设计成人类的习惯,那么这种设计就不会被玩家认可。不要低估这些设计,要不人就不会有人来买你的帐了。等级设计不好的等级设计会叫AI看起来很白痴。等级设计的人和AI设计的人必须确保游戏中的每一个事物都在对应的位置。如果你花了六个月时间把AI放到游戏中的每一种级别场景的中,但是AI的级别确没变,这种AI看起来也是很愚蠢的。一定要确保各个阶段上的等级值非常严明(1级AI就对应1级场景设计、1级战斗数值)下面解释该系统的工作原理:物理部分由物理引擎完成,包括碰撞检测、碰撞反应,保存着物体坐标等物理信息。某些碰撞信息要通知感知系统,也就是该单位的触觉。感知系统在不同单位中差别很大。例如最简单的敌人可以没有任何感觉。稍复杂的敌人可以拥有视觉,即可以发现其前方的玩家,这时玩家可以绕的敌人身后偷袭。更复杂的敌人可以拥有听觉,即玩家在身后偷袭时如果打碎了物品也会被敌人发现。魔兽争霸中的单位可以感知附近的敌人,发现敌人进入了一定区域就会自动去攻击。感知系统可以直接决定单位行为,类似与条件反射,例如“受到伤害”的感觉会让单位逃避伤害,哪怕这个单位没有高级决策能力。决策系统是单位的高级AI,单位可以综合感知系统提供的各种信息和其他单位对其下达的命令做出判断。命令可以是玩家的输入,也可以是团队指挥者(也是一个AI单位)下达的。例如DOTA中一个AI英雄通过综合衡量自身的生命、攻击力、对方生命后,决定和对方PK。决策系统可以使用有限状态机、神经网络等技术。同时也可以让单位拥有学习功能,但平衡的学习功能实现起来比较困难。决策系统直接知道单位的行为,是攻击、移动,还是跳跃。单位行为可以由有限状态机管理。另外,较为复杂的游戏地图里,决策系统有时需要导航系统把“前往某处”分解成“先到哪,后到哪”,再控制单位的行为。至此,整个AI引擎已经比较完善了,在各种类型的游戏中也比较通用。可以把AI的整体框架放到游戏物体基类(GameObject类)中,各派生类继承并重写关键方法,从而表现出不同的智能。