游戏编程技术贴:AI设计的若干规则阐述

一般来讲,网络游戏的AI历来就是很简单的AI。相比之下,很多单机游戏的AI就要得复杂一些。而笔者并未从事过大型单机游戏的AI设计,所以也就不班门弄斧了。但至于网游的AI,还是略知一二。

目前游戏中的AI,都是事件引发行为的机制。它们并不会自我学习和成长,都是写死的一些事件(条件)和行为,类似于昆虫的应激性表现。有限状态机或者行为树,都是在此基础上进行设计的。不过这不属于策划工作范畴,在此也就不多加描述了。

以下就AI的一些规则进行描述,目标主要是做一个MMORPG游戏的怪物AI。

一、普通AI

在设计AI时,我们先需要设计一个基本的模板。这个模板会有一个基本的流程,如下:

登场前→非战斗状态→战斗状态→脱离战斗或死亡

流程图就不画了,想必接触过AI的童鞋都能清晰的知道这个流程。流程中每一个节点都是AI的一个状态,策划要做的,就是规定每一个状态AI的行为特征,以及状态切换的条件和AI行为。这其实也是有限状态机的思路。

我简单举例一下。

登场前AI载体特征:不可被选中,不可被攻击,有登场范围。

登场前→非战斗状态:敌人进入登场范围,执行登场行为,执行完毕后切入非战斗状态。

非战斗状态:AI持续待机或巡逻,有锁敌范围。

非战斗状态→战斗状态:敌人进入锁敌范围,或遭遇锁敌范围之外的敌人攻击。

...

好了,举例完毕。

策划只需要规定好每个状态AI的特征,以及切换状态的条件,AI也就能自己运作起来。这是有限状态机的思路,但是其实很多项目是运用的行为树结构。这个大家百度一下即可,行为树容易构造更复杂的AI,条理更加清晰。简单讲就是列出所有的AI行为,然后按照一定的优先级顺序执行下去。(程序向的东西就不多说了,有兴趣的策划可以自行百度,或者就问自己项目的程序就行啦,不难的啦~)

二、特殊AI

以上第一点讲的是最基本的AI流程,我们不妨称之为普通AI,由于是入门必须懂得的流程,所以我想不用赘述。而这第二点,则是相对进阶一些的AI设计了。

如果把AI设计比作造车的话,普通AI就已经是车的构架了,至少能保证这车能启动。而特殊AI更像是改装配件,能一定程度提升整车的性能。

特殊AI是独立于普通AI之外的补丁。也是由一系列的条件和行为构成。在此,策划需要做的事情就是构建一个条件和行为库,以便于程序逐一开发以及以后搭配。

条件库:

1)目标距离≥n

2)自身生命值≤n

3)任意单位拥有idXXX的状态n层

4)目标施放魔法技能

...

行为库:

1)施放idxxxx的技能

2)逃跑

3)增减idxxxx的技能(或者直接替换技能列表,看具体项目实现方式)

4)增加idxxxx的状态

...

待程序逐一开发完毕,具体应用上我们只需要做一些搭配即可。比如当条件4)目标施放魔法技能,则执行行为2)逃跑。当自身生命值≤30%,则执行行为3)替换自身的技能组。

最后,特殊AI的优先级高于普通AI。它更像是一个补丁,来弥补普通AI的不足,补充特殊的条件以及特殊的行为。而其并不具有普适性,因为可不是所有的怪物都会做这些事情,我们我们还是将其封装成特殊的AI来处理。

也正因特殊AI并不具有普适性,并不建议过于广泛的使用,增加性能的压力。主要应用于精英怪和BOSS等地方。

三、特殊AI是否必要

特殊AI并不是必须的。很多游戏都是没有特殊AI的,多见于回合制游戏。他们有多个普通AI的模板,或者直接将一些AI行为封装在技能中(可见MT1,刀塔传奇)。但如果你需要让怪物变得更加聪明多样一些,或者你们游戏是更加强调BOSS战的话,特殊AI还是能起到重要的作用。具体设计时,则需要注意有些行为直接封装在技能中会比封装在AI中更合理,一般来讲,技能能做的事情尽量不要让AI来做。

四、集团AI(区域AI控制器)

当你设计好普通AI和特殊AI之后,单个AI载体基本上已经能够满足网游AI的需求了。但是依然有人希望战斗能变得更加有趣。他们希望看到怪物之间的协作关系,也希望看到怪物不是一股脑的冲上来,而是会寻找机会伺机待发。

那么,你需要使用到集团AI了。

目前笔者还没见到过什么网游有使用集团AI,基本只局限于《战神》、《鬼泣》这种割草游戏有大范围使用。

集团AI你可以想象成一个无形的指挥官,在每个区域战斗时,他们都左右着战局的进展。他们做的事情是这样。

①相对于主角划分4或8或更多的方位,然后安排所有的近战怪物按照这些方位站好位置(包围住玩家)。比如有5个怪物,主角有4个方位(前后左右),那么按照一定规则,主角身前有2个怪物,左右各1个,背后有1个。

②怪物站好之后,他们并不会立刻攻击,而是在主角周围游走。(游走AI下详)。

③这时候“指挥官”说,左右的怪物,攻击。那么左右的怪物会执行攻击,其他怪物继续游走。

④当左右的怪物攻击执行之后,“指挥官”又说,前方的怪物攻击,那么前方的怪物就会攻击,其他怪物继续游走。

...

以此类推,直至战斗结束。

这个战斗场面就像是武侠电影中,主角哪怕遇上千军万马,但主角同时只会面对最多3个敌人的同时进攻。其他敌人呢,则都围绕在较远的地方舞刀弄枪。

这是玩法的需要,毕竟当敌人全部一窝蜂上来的时候,手游账号出售整个战斗过程将会很模糊,意思是如果你一招没秒得七七八八,那就得被瞬秒了。玩家都很难清楚发生了什么。那就变成了标准的拉怪--聚怪--秒光的数值游戏了。

当然,你是否需要使用集团AI,这个也是有待商榷的。因为一旦采用这个方案,那么怪物就需要多种攻击途径,玩家角色也需要采用多种反制策略。而且这种集团AI基本只适用于单角色割草游戏。

显而易见,集团AI的主要作用还是控制战斗节奏和难度。如果你不想用这套AI的话,倒也有简便的办法。那就是公共CD(技能间隔)的概念。即怪物使用一个技能之后,会隔一段时间才可能再次挑选技能。

注:这里所说的集团AI与特殊AI中的协作部分不同。如果你想实现如下效果,这是特殊AI改做的事:

一堆怪里面有一个怪物队长,这个怪物队长每隔10秒会发起一起咆哮,每次咆哮时,其他小怪都会使用冲锋技能。那么,这个其实是特殊AI了,小怪拥有特殊AI,检测队长发出了咆哮(或者咆哮给所有小怪加了愤怒状态,小怪检测到自己有愤怒状态),则立刻施放冲锋技能。

五、游走AI

在第四点中,谈到的游走行为。是指怪物在无技能可放时,会跟目标保持一定作战半径,并且以一定的时间间隔围绕半径的周长进行移动的行为。

你可以理解成,假设玩家角色和怪物都不攻击的情况下,怪物会一直围绕着角色转,就像是一直在寻找主角的破绽一般。

游走AI实现逻辑比较简单,但是麻烦的是动作的配套。毕竟很难有动作会同时适合前后左右的移动。所以当你决定使用这种AI,又不想消耗更多的美术资源时。你可以在漂浮型、蜘蛛多脚型、蹦跳型等移动方向模糊的怪物身上使用。当然,你不介意滑步的话倒是可以大面积使用这种AI。

游走AI的具体参数需根据游戏类型而定。比如战神的游走AI就是围绕主角转,而DNF的游走AI则是聪明的怪很少会跟角色站在同一个X轴向上,他们会不断改变自己的y轴坐标,让玩家苦不堪言。

不论如何,游走AI很容易设计成让怪物不断的围绕玩家移动,以至于玩家不会太难追上单个怪物,但是又很难一次秒杀所有怪物。

六、技能挑选

AI行为主要是移动和技能挑选,移动部分就是巡逻、移动、追击、游击,想必不用赘述。

至于技能挑选,则有一些小规则需要注意。

首先,所有的AI载体都需要一个技能列表,这个列表用于AI挑选技能。

但是实际上,AI载体可能还有个更高优先级的技能列表,专门用于特殊AI等特殊事件触发的技能施放。再此就不赘述了。

当AI拥有这个技能列表之后,我们则需要给技能挑选设立一些通用的规则:

①顺序规则:即从左至右的顺序依次施放技能,当无法施放则跳过到下一个技能。这个很简单,可控性非常高,就是不灵活。

②权重规则:给所有技能都配置一个权重,按照权重比值来概率挑选技能。这个是纯随机规则,好处就是怪物显得智能得多,而不是一场战斗中所有同样的怪物都做同样的事情。

③优先级规则:即每次施放完技能后,又尝试施放优先级最高的技能,如果不能施放,则尝试施放次级优先级的技能,以此类推。这个规则有个问题,就是当优先级最高的技能没有冷却时间的时候,则永远只会放这一个技能。

并且这套规则在初始化顺序时,显得比较笨拙。所以需要做一些小小的优化。那就是所有技能都需要配置一个“填弹时间”,即AI载体生成时,他所有技能需要填弹,或者称之为“预冷却”。即已经进入了冷却状态。这样的话,方案③将能完美呈现方案①的优势,即顺序可控。

MT1使用的就是方案①,刀塔传奇使用的就是方案③(刀塔传奇的技能挑选规则笔者自己猜测的,可能实际方案有偏差,但应该八九不离十。不论如何方案③确实可以重现该游戏战斗中各种技能挑选的情形)。

总之,设计者可以在以上三种方案中,打一些补丁规则,或者进行一些结合,来实现更高层次的效果。

总结:

AI设计不同于关卡和角色的设计,主要是没有太多的方法论。很多都是约定俗成的东西依据设计者具体需要来进行取舍。真想做好AI,还是需要涉猎更多的资料,并且进行更多的体验和尝试。

此文主要是从策划角度描述一些AI设计上的取舍,真要写的话还需要写很多,许多细节也不是很完善。但整体来讲,掌握这些,做一个对怪物AI要求较高的MMORPG问题应该不会很大。

兴致来了就随便写写,也懒得专门去绘制一些示意图,回头一看写的蛮长的,真能全看完也都是神仙般的存在了。嘛,还是希望能对大家有益吧,也欢迎大家讨论。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值