游戏编程新手必看 怪物AI的基本设计要点
游戏程序开发是游戏的基础,如何给游戏设定一个好编程将决定游戏的好坏。如果你还是游戏编程的新手,那么你可以从怪物AI的设计入手来深入了解游戏应该如何编程。
AI的设计,如果从程序口中说,可能会跳出诸如“行为树”“ 决策树”“有限状态机”之类的程序名词,听起来很专业有木有?但是策划没学过肿么办?不要急,我们先抛开这些程序名词,仅仅从策划设计角度来梳理一下怪物AI的策划设计。当然,如果理解有错误,希望大家指出,共同学习进步。
怪物AI应该说是这是一个程序问题,如果从策划的角度来说,作为设计者,则需要了解怪物AI整体的设计流程,这样才能提出自己的需求,从而让游戏战斗的整体体验符合设计预期,毕竟怪物AI也是属于战斗和体验的重要部分。
1、什么是怪物AI?
在策划意义上来说,怪物的AI实际上是一种交互体验,换句话说就是怪物或NPC等虚拟角色在面对玩家操纵的角色的时能够给出合适恰当反应。实际上,在游戏实际的设计中并不是一味地需求怪物的AI越高越好越真实越好。在游戏中,我们的目的是让玩家和怪物或NPC的交互能够产生一种近似真实的可对抗性,这种接近真实的对抗才是怪物AI设计的目的,这样才能吸引玩家去继续战斗,甚至不断的提示自己的装备属性和能力,引入进一步的对抗。
怪物的弱小和强大,聪明和愚蠢其实都是设计的需求。
所以说,怪物的AI设计目的是期望和玩家的交互中可控的,平衡的以及具有诱导性的。
2、怪物的ai包括什么?
怪物的AI说白了就是多种状态之间的转换,这种转换是基于逻辑的,符合常理的逾期。
在怪物的状态则是基于怪物的特色本身来设定的。
我们以《暗黑破坏神2》的骷髅怪AI为例:
在暗黑2中,在MonStats.txt这个文件中有aip1~aip8中这几列设定怪物的ai行为参数,暗黑2的检定方式为随机数,即是以随机取一个0到100的数字来和表中的参数数字比较,如果小于或者等于该数值则视为检定成功,否则失败。
Skeleton (骷髅)
描述:骷髅战士是一个迟钝的AI,它发现敌人后会试图接近,有敌人在攻击范围内时则持续攻击,但是它经常会毫无理由的停止动作一段时间,站着发呆。
1. 当肉搏范围内没有敌人时,继续接近敌人的几率
2. 当肉搏范围内有敌人时,攻击敌人的几率
3. par1,par3检定失败后等待的时间(单位:帧)
4. 攻击时,以A2代替A1的几率
5. n/a
6. n/a
7. n/a
8. n/a
通过这几条我们可以看到在暗黑2中骷髅的行为方式实际上比较简单,只有接近敌人,失败等待以及攻击等几种简单的状态,一旦随机数进行判定,也只会从这几种状态中进行反应交互。
实际上来说暗黑2的ai设计思路主要还是以随机数判断加上条件行为为主,这个实际上也是目前绝大部分游戏采用的方式。
这种思路来说,虽然比较原始和传统,但是优点在于简单好维护,理解和调试比较简单, 当然缺点也比较明显,就是容易出现怪物行为单调,千人一面,因此也对怪物设计和条件的设定提高了要求。
如果来拆解暗黑3的AI,我们可以看到有这么几条是必需的。
1、怪物AI的判定方式。一般采用随机数,也就是掷骰子的方式,这是比较常见的手法。用来判断ai是否开始执行。
2、怪物的范围设定。
怪物的范围简单来说就是怪物的战斗范围,实际上也可以 的说是怪物的听觉视觉,如果要说细一点,那还会分为战斗前和战斗中两个阶段,在战斗前会有游荡范围,听觉警戒范围和视觉警戒范围,而在战斗中会区分为追击范围,近战攻击范围、魔法攻击范围和呼喊范围。
听觉警戒范围为360度,视觉警戒范围为120到180度不等,二者可以共享半径,也可以让半径不同。
∵体拆分如图所示:
设置这些范围有什么用处呢?这些范围实际就是处理各种不同的AI行为条件的基础了。
3、AI行为条目
AI的行为条目是只怪物所能够采取的行为策略,在实际上,怪物的一个完整的流程是指怪物的从出生到死亡的整个过程。
出生,是指怪物的创建生成情况,这个比较好理解,这时对应的战斗前范围。怪物的状态可能是游荡,巡逻,静止等各种行为条目,这些就属于第一类的AI行为。
而后的情况,则是怪物面对的战斗情况,即如何进入战斗?一般来说,游戏会设定一个“仇恨值”或者主被动的设定。
仇恨列表相当于另一个系统了,这里就不展开说了,而对于AI来说,有了仇恨值,则可以进行一系列基于仇恨的行为了,比如进行攻击,释放技能,是否追击,是否呼喊召唤支援等等。
最后就是怪物进入濒死阶段的一些特殊行为,这些是基于特定条件的比如HP血量下降到一定程度,怪物会有溃败逃跑、呼叫救兵或者使用特殊技能比如“自爆”等其他行为。
以上就是基于条件行为相关的一类基础的怪物AI行为的设计逻辑。属于比较基础的AI设计,当然也是比较好用的一类设计。
主要可以用表格或者文本来制作,当然具体的实现和调试则需要策划和程序大神一起共同完善了。
随着游戏制作技术的进步,关于怪物AI的制作也越来越工具化了,感谢程序大神们的提供的各类高端工具,这里也顺便介绍一下,希望后续能和大家交流。
一类是基于编辑器的怪物AI编辑。比如暴雪一般会提供一个功能相当强大的游戏编辑器,在编辑器中则会有专门关于怪物AI的编辑内容。
比如星际2中的编辑器,推荐大家学习使用,这里就不展开说了。
其次是怪物AI的行为树编辑。行为树这个概念也是比较久的一个工具,不少商业引擎都支持行为树的编辑,比如Spore(孢子),Crysis2(孤岛危机)都是采用行为树来制作对应的AI模型。
如图示意(示意图来源为网络,仅做示意)
上图所示为一个怪物的行为树,作为策划来说,需要关注的是上图中几类不同的颜色区分,代表了不同的行为,条件和控制节点。
在我看来,行为树最好的方面在于如何去控制AI携带者的行为的路从初始到最终实现是如何走的,在行为树上来有多个节点以及一系列控制条件帮助携带者的做出正确及时的选择,这种选择过程是充满乐趣的。
相比之前的在excel表上的写写画画,这无疑是打开了新的一扇门。
从根节点从左往右可以看,怪物的每一步选择以及判断都会有对应的行为分支来控制,犹如一颗树一样枝繁叶茂,每一条分叉都有对应的行为和条件,就这样多条分支的执行来搭建成一个完整的行为模型。
因为我们的最终展现的仍然是怪物所执行的行为结果,即为行为节点的内容,不同是执行行为节点的判断以及行为过程的控制力度,行为树可以增加任意多的节点选择分支,这就给怪物的行动判断加多了更多的可能性,制作人员在理解上也会方便很多,当然更重要的优点是程序上处理的优势,这里就不展开讨论了。总而言之,怪物AI制作博大精深,这里只是粗浅描述,难入窥门子径,唯望可抱砖引玉,共飨同好。