AI设计的若干规则阐述
转自:http://www.gameres.com/491742.html
一般来讲,网络游戏的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问题应该不会很大。
AI设计的若干规则阐述的更多相关文章
- 《棋牌游戏服务器》斗地主AI设计
设计目标 要取得良好效果,首先要搞清楚一个问题:我们想得到一个什么样的斗地主AI?我们的AI是用在手游产品当中,在真实玩家不足时为用户提供陪玩服务,这个目标决定了这个AI要具备以下两个核心特点:1.执 ...
- Cloud Foundry中warden的网络设计实现——iptable规则配置
在Cloud Foundry v2版本号中,该平台使用warden技术来实现用户应用实例执行的资源控制与隔离. 简要的介绍下warden,就是dea_ng假设须要执行用户应用实例(本文暂不考虑ward ...
- 超强干货,11个灰常实用的AI设计小技巧!
11个超级实用的AI设计小技巧!涉及到很多的实用操作,纯干货经验总结,灰常值得收藏,赶快转走学起来吧! 编辑:千锋UI设计
- MOBA英雄AI设计分享
转自:http://www.gamelook.com.cn/2018/07/333877 文/wataloo 1 设计概要 1.1 设计原则和目的 英雄AI的目的主要有: 1.新手过渡局,让玩家刚 ...
- 10个Web设计的SEO规则
规则0:不要试图作*弊来提升SEO效果.当你踏入一个房间:里面汇集了手拿各种博士文凭的科学家,你认为你会聪明过他们吗?当然不会.Google和百度拥有成百上千个这样的房间,里面的工作人员都是高学历的技 ...
- Android俄罗斯方块AI设计文档
首先上源码: https://github.com/bingghost/SimpleTetris 一.概要 使用了2种AI算法: 一种是经典的Pierre Dellacherie算法 一种基于基于深度 ...
- 元素化设计原理及规则v1.0
一.元素设计架构 元素设计架构展示在基于元素化设计的思想下,系统各元素之间如何相互协作,并完成整个系统搭建. 架构中以Entity(数据)为中心,由Entity产生数据库表结构,并且Entity作为业 ...
- Python3练习题系列(05)——设计和调试规则
If 语句的常见规则 1. 每一个“if 语句”必须包含一个else: 2. 如果这个else 永远都不应该被执行到,因为它本身没有任何意义,那你必须在else 语句后面使用一个叫做die 的函数,让 ...
- Kinect 开发 —— 用户交互设计的若干思考
Metro 风格 windows 8 Kinect Hub 手势原型设计 悬停选择 翻页控制 关节点重叠的处理方法 将箭靶设置在画面的边缘,这样玩家持弓的角度与屏幕保持一个大约45度的锐角,这 ...
随机推荐
- hibernate 查询方式
1.对象导航查询 2.OID查询 3.hql查询 4.QBC查询 5.本地sql查询 一.对象导航查询 示例: 查询id=6的user对象的所有角色: 二.OID查询 实例查询id=6的user对象 ...
- SpringMVC的第一个入门案例
用户提交一个请求,服务器端处理器在接收到这个请求后,给出一条欢迎信息,在页面中显示. 第一步:导入jar包 在原有Springjar包基础上添加2个jar包 spring-webmvc-4.2.0.R ...
- 教你管理SQL备份与恢复系列(1-20)
原链接:https://bbs.51cto.com/thread-1147908-1.html 教你备份与恢复数据库,直接下面下文档吧. 教你备份与恢复数据库(1)事务 http://bbs.51ct ...
- js实现粘贴板复制
<a href = '#' onclick ='javascript:window.clipboardData.setData('text','${form.param}');alert('クリ ...
- python基础12 ---函数模块2
函数模块 一.sys函数模块详解 1.sys.argv[x] 功能:从程序外部接受参数,接收的参数个数可以是多个,在程序内部sys.argv吧这些外部参数转换成元组的形式,然后以索引x的方式在内部取出 ...
- HDU - 1114 Piggy-Bank 【完全背包】
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1114 题意 给出一个储钱罐 不知道里面有多少钱 但是可以通过重量来判断 先给出空储钱罐的重量 再给出装 ...
- Swift 枚举简单使用
//定义一个枚举 Direction 枚举字符名字 enum Direction{ case North case South case East case West }; enum Directio ...
- [算法]K-SUM problem
一.Two Sum Given an array of integers, find two numbers such that they add up to a specific target nu ...
- SparkRDD内核
Spark内核 RDD是基础,是spark中一个基础的抽象,是不可变的,比如我们加载进的数据RDD,如果想更改其中的内容是不允许的:分区的集合,可以并行来计算:RDD类中包含了很多基础的操作,例如ma ...
- Spark- Action实战
Spark- Action实战 package cn.rzlee.spark.core import org.apache.spark.rdd.RDD import org.apache.spark. ...