AI系统需求及解决方案(v0.2).doc
《AI系统需求及解决方案(v0.2).doc》由会员分享,可在线阅读,更多相关《AI系统需求及解决方案(v0.2).doc(18页珍藏版)》请在冰点文库上搜索。
![AI系统需求及解决方案(v0.2).doc](https://file1.bingdoc.com/fileroot1/2023-5/14/9c43c0f9-475f-47c9-aa16-8124f960c3e5/9c43c0f9-475f-47c9-aa16-8124f960c3e51.gif)
内部资料
目录
目录 2
第一部需求目标及要求概述 2
第一节策划设计需求 2
第二节程序对自身设计和制作过程的需求和要求 5
第三节先期制作内容 7
第二部需求分析 7
第一节:
数据列表需求 7
第二节:
决策规则 8
第三节:
D3阶段具体制作内容 8
第三部解决方案 9
第一节NPC状态机组织关系 10
第二节NPC智能切换关系 12
第三节决策系统对状态机的影响 13
第四节决策系统的构成 13
第五节数据项描述 16
第六节类描述 16
片外编:
其它系统 17
第一部需求目标及要求概述
第一节策划设计需求
一、单个NPC的需求
单个NPC的行为是重点功能,群组行为则是在这个基础上增加群组的管理和指挥。
对怪物的基本描述如下:
1.主动攻击类型:
有敌对状况存在的对象进入警戒范围便对其发起进攻,直到战斗结束,返回攻击前位置。
包括:
Boss、凶狠的怪物、警卫、炮台等。
主动攻击开关关闭时,对在警戒范围内的敌对对象不主动攻击,直到该对象首先发起了攻击,才进行攻击,直到战斗结束。
包括:
初级怪物、敌对状态的功能NPC等。
2.受害不攻击类型:
即使玩家攻击怪物,怪物也不会予以还击。
(如:
新手试炼怪)
3.同类支持类型:
(以被攻击为触发点)
1〉:
攻击性支持:
当怪物发现有与自己为同种族的同伴受到攻击时,即会主动帮助同伴攻击敌人。
怪物会支持所设定的“侦测范围”内被攻击的同伴。
2〉:
辅助性支持
当怪物发现有与自己为同种族的同伴受到攻击时,即会主动帮助同伴加血(怪物本身必须有加血技能)。
怪物会根据所设定的侦测范围支持其范围内被攻击的同伴。
如果同伴死亡,则攻击刚才同伴的目标。
4.受害即逃跑:
不会产生反击,当怪物受到攻击时,立即会逃跑。
怪物依据所设定的“逃跑速度”进行逃跑,并依据所设定的“逃跑距离”判断逃离距离。
在逃到不能再逃的时候,随机在原地移动,直到战斗结束返回或则死亡。
5.条件转换AI:
例如:
血量低于20%则逃跑;受到致命一击3次,引发狂暴;发现敌人就召唤宝宝;每少10%的血,投掷毒气弹;定时释放群伤魔法等。
6.不死类型:
此类怪物永远不会被打死。
(如:
新手试炼怪)
A战斗行为的选择:
攻击、追击、逃跑、召唤、呼唤、投降、巡逻(攻击前进)、定制寻路、目标寻路等
B触发条件:
进入视野、受到攻击、受伤
C可使用技能列表(初始化/定制)暂定为8种技能。
战斗宠物的技能列表可能会多些。
D武器选择和切换:
根据距离选择近远战武器;根据自身条件切换武器和魔法的使用。
E攻击对象的选择:
仇恨系统:
攻击固定仇恨技能附带仇恨,为固定值,普通攻击则是由公式计算出仇恨值,无治疗转换仇恨。
根据策划的某项规则获得合适的对象。
如获得:
仇恨最高的对象,仇恨最低的对象,治疗最高的对象,伤害最高的对象等。
F攻击技能的选择:
1简单战术选择条件:
距离:
在较近距离内选择近战攻击,在较远范围选择远程攻击;
主技能类型:
战斗NPC分为:
战士型、法师型、术士型、牧师型
基础功能:
具有近远程攻击切换功能
战士型:
主要是近战攻击,远程攻击较弱。
法师型:
主要是远程攻击,近战攻击较弱。
术士型:
主要是远程攻击,近战攻击较弱,召唤宠物、图腾、炸弹、毒雾、火云等其他物品辅助战斗。
牧师型:
近远程攻击都较弱,但会给自身或者同伴治疗。
2不同情况下技能的细节选择:
如自身HP、范围内的目标数量、自身方向与目标方向的夹角计算等;目标的类型、HP、MP等,可检测的目标的属性; Buff的检测、宠物数量类型的检测等。
3特殊逻辑:
提供策划对于技能选择条件的可控制的接口。
例如:
能获得目标是否正在吟唱过程中,来决定是否释放类似打断或者沉默这样的技能。
G变身切换:
魔兽中德鲁伊、祖尔格拉布的一些祭祀、通灵的食尸鬼等。
H生活行为的选择:
固定特殊行为(要求在配置文件或者脚本中完成)和通用行为行走、休息、普通表情(笑、哭、敬礼、羞辱等)
I感情表述的选择:
表述条件(任务、声望、当前状态、其他趣味性设计),实现机制
(先期服务器传输,后期标志传输,客户端翻译—代号转文字+多国语言)
J高级指挥系统:
兵员组织,行动路线,目标,达成效果评估(地标性建筑的击毁、屠杀数量等),攻击撤退的选择(伤亡统计范围、速度等),防御策略决策
K其他逻辑需求:
操作地物、NPC之间的通信及识别
二、群组形式NPC的行为需求
A范围通知方式:
描述:
当一个怪物受到攻击以后,可能在某种情况下,会呼唤旁边的怪物,来攻击玩家。
包括:
刚受到攻击、攻击过程中、某个条件下、逃跑过程中都可以呼唤周围相同类型的怪物,攻击目标玩家。
这种范围缩小可为以NPC为中心,几米的范围内;也可扩大,如整个场景、整个副本、或者地图的一个逻辑区域,如:
巨人旷野、十字路口这样的小区域。
B头领方式:
如果头领消亡(注意不是死亡),整个群组消亡,生成则是由头领创建
描述:
一个Boss有8个跟班,把8个跟班杀了,这个Boss就投降了;怪物术士,当主人死亡,BB就消失;但是怪物猎人就不同,BB战死或者脱离战斗状态才会消失,原因是要合乎背景设计,因为术士的BB是要靠术士的“法力”维持,术士死亡也就是法力消失,法力消失BB就没有生存的依据了,合乎西方魔幻系统的情理。
C定制方式:
情景NPC相互触发。
三、队伍NPC的移动行为需求
A宠物行为:
1.跟随功能:
移动的时候跟随主人;主人停止后,以主人为中心在规定范围内随机移动。
2.具有功能:
原地待命;取消原地待命,返回主人身边;
3.类型:
攻击型:
主动攻击周围可攻击目标;
防御型:
在主人遭到攻击,攻击那个攻击主人的对象,目标死亡或者无效后,返回主人身边,再攻击下个攻击主人的对象。
跟随型:
只是跟随主人,在没有接到主人攻击命令之前不进行攻击;或者不具备攻击功能,仅为装饰性。
4. 可操作战斗功能(包括客户端界面),技能学习功能
B队列组织:
队形包括:
围攻队形+行进队形+队形整理
四、NPC的关卡行为需求
对地物的发现和操作
能区别进入视野范围内的对象的类型:
操作一个门、按钮、某种装置等情况,在关卡设计和任务中应用较多。
第二节程序对自身设计和制作过程的需求和要求
程序基础功能需求:
1数据录入系统:
统一的XML数据录入系统。
客户端服务器都需要使用,并且在D3阶段要进行详细的功能性设计和测试,这些是必需的。
2通用性表格系统:
在进行技能、目标、队伍、物品、工会、临时数据等方面都将大规模的应用,该表格系统需具有:
命名、存储、添加行列、删除行列、关键字/条件查找、条件排序、插入行列、表列定义及排错、表行长度定义及操作等功能。
3计时系统:
主要是获得时间差,来完成诸如:
冷却、各种逻辑周期等,BW中的timer()因必需为实体才可操作,故我们需要一个不产生实体能在程序虚拟体上运行的计时系统。
还有个原因就是entity发生迁移的时候,是否引起timer()函数的重置或被取消。
一、行为状态机
行为状态机的行为选择的名字规则,以及使用名字进行行为状态的操作。
目的为方便调用和转换
二、AI系统的突发变异。
在决策系统中加入可变因素—模糊逻辑参数(高级)
三、关卡相关的具体设计需求。
根据策划需求,一般为定制
四、脚本接口的易用要求。
命名规则及参数设置尽量的简单明了。
获得场景的相关信息。
获得目标的相关信息。
消息事件的定义、分类、格式。
五、地编中路线设定的修改。
在地编中进行固定式寻路的设定,但是来回往复运动其格式为:
183309B4.45313788.7762F591.BC3519BC
48.7100140.83007863.172955
C91C1EA8.4EE6AEBC.543192A5.DF639262
707AFAD2.4642ADC0.5B3C219E.A9D51CBD
true
DDE13F4F.4B4FD2FD.82B6D8BC.001A687D
true
无法区别点的方向,必须进行修改,才可在多点双方向情况下,让编辑变得简单。
六、工具需求
参考《关于《峥嵘天下》项目人工智能及NPC行为系统设计总纲
》中第二章第三节工具需求的内容
第三节先期制作内容
一、单个NPC的
A战斗行为的选择
B触发条件:
进入视野、受到攻击、受伤
C可使用技能列表(初始化/定制)暂定为8种技能。
战斗宠物的技能列表可能会多些。
E攻击对象的选择:
仇恨系统
F攻击技能的选择:
1简单战术选择条件
H生活行为的选择
二、群组形式NPC的行为需求
半径范围内通知其他怪物
三、队伍NPC的移动行为需求
A宠物行为:
跟随功能
第二部需求分析
第一节:
数据列表需求
1在NPC身上建立对象列表,包括仇恨数据
2技能列表可配置
3武器列表可配置
4法术状态表与玩家的相同
5状态机名称列表可配置
第二节:
决策规则
1当前目标的选择规则:
主要根据仇恨系统的结果进行,但是根据不同的情况选择其中不同的对象。
2技能选择规则:
在不同的自身的情况和外界情况下所影响的技能选择规则
3武器切换规则:
根据不同的自身和外界条件下,选择切换当前的主要使用的武器进行攻击,因为要发生外观的变化。
4行为状态切换的规则:
此规则一般直接使用脚本实现,完成FSM机,并配属在相应的NPC身上。
运算规则:
1仇恨数值的运算规则,将各种因素的仇恨转换为可比较的统一性质的仇恨值
方法:
原始仇恨值(可能存在类型不同,也可将来便于调整),通过系数转换的方式,转换成同一性质的仇恨点数,方便各个不同事件进行比较。
仇恨系数规则。
仇恨列表项的添加和删除规则。
以及各种情况的处理规则。
例如:
牧师的渐隐术,战士的强制攻击等技能对仇恨列表的影响。
2状态及转换机制:
解决如何在不同状态机之间进行切换,并达到切换的流畅性,数据流通的简单性。
第三节:
D3阶段具体制作内容
1.战斗触发的接口。
怪物的主、被动攻击触发。
主动攻击怪物的触发:
在玩家进入他的境界范围后,进入攻击行为流程。
被动攻击怪物的触发:
在受到伤害以后,确定目标进入攻击行为流程。
2.任务交互功能。
与任务模块交互的接口。
在AI组切换方面要给因任务触发转换AI组预留接口。
制定切换关键变量的相关信息和格式。
3.定制自有生活行为。
(打断后能继续进行活动,或者重置)。
三套生活模版:
<1>怪物出生后,无论是主动攻击还是被动攻击,在指定的范围内随机移动,带有偶尔性的速度变化。
<2>按照指定的路线来回行走巡逻。
例如警卫NPC、巡逻的怪物。
<3>一个旅行商人的活动。
会在某点驻留,可交互任务或者物品的功能。
主要是添加相关驻留控制的流程。
4.定制战术策略主要是受害不攻击类型(新手试炼怪)、战士型、法师型、骑士型。
新手试炼怪:
受到攻击不会逃跑,也不会攻击,站在原地不动,直到自身死亡;如果在15秒内不受到攻击,则恢复普通生活状态。
战士型:
分为主动攻击和被动攻击两种;攻击的方式就是近战攻击,追逐玩家进行战斗,不会逃跑,不会呼唤同伴,没有任何法术技能;如果过于靠近目标,转身后退,然后再转过身来攻击目标;基本配置能力为高防,中等攻击能力。
法师型:
分为主动攻击和被动攻击两种;攻击的方式为远程法术攻击;进入可攻击的范围,进行法术攻击;超出攻击范围,进行追击;具有HP<20%的时候,进行逃跑或者呼唤同伴的能力。
基本配置能力为低防,高等攻击能力。
骑士型:
分为主动攻击和被动攻击两种;采用近战攻击方式,基本与战士相同;具有治疗自身的能力;不会逃跑,不会呼唤同伴;基本配置能力为高防,低等攻击能力。
5.技能选择决策的接口。
并实现简单的技能选择决策规则。
因NPC会配置有同类多种技能。
所以在攻击、治疗的时候,需要进行技能选择。
6.NPC战斗结束的处理:
<1>如果超出进入战斗状态时的位置50米,则无敌返回那个位置,血量恢复满,继续其生活状态;
<2>死亡的时候掉落物品;暂时不进行物品归属的处理。
<3>死亡后5秒尸体消失;
<4>通知生成器/生成器自行检测,按照配置时间间隔,生成新的NPC。
第三部解决方案
第一节NPC状态机组织关系
在每个NPC的配置当中,考虑它可能的状态转换。
并进行分类,存在的不同的状态机组的数量控制在2个以内。
如果出现非常复杂情况,建议将在第二状态机组内完成。
对状态机组进行大的归类:
InitiativeMonster主动攻击怪物
PassiveMonster被动攻击怪物
Patrolman巡警
WanderingTrader游走商人
Plebeian平民
CommonPet普通宠物
CombatPet战斗宠物
StoryNPC剧情NPC
ProtectedNPC被护送NPC
例如一个主动攻击的祭司:
那么它的默认状态机组是剧情NPC,但是当他发现你进入他的警觉范围的时候,就会切换成主动攻击怪物,当其结束战斗状态以后,又会变成一个剧情NPC,不停的在那里祭祀和来回走动。
又例如一个可攻击动物的游走商人:
当他在路上行走的时候,他的默认状态机组是游走商人,你点他它会停下来和你交易;
而当他发现了一个动物的时候,结束和你的交易状态,他会切换为主动攻击怪物(而玩家是否可以攻击这个商人则是由声望阵营等其他因素来决定,商人是否主动攻击玩家也是由其他外界因素决定),去攻击这个动物,结束之后返回刚才的所在地,等待你和他继续进行交易,如果等待时间结束,则继续游走商人的其他行为。
再例如一个可被护送的任务NPC:
任务触发前他是个平民,没有攻击与被攻击的可能,但是在任务触发以后,他会切换为剧情NPC,按照路线行走、召唤怪物、战斗并结束自己的剧情。
例如:
NPC的配置中:
Live=WanderingTrader/Patrolman
Combat=InitiativeMonster/PassiveMonster
Task=TaskNPC
这些相当于通用的AI模版,在NPC的InitAI()中,去添加相应的这样一组人工智能:
例如:
defInit_AIs(self):
AI[“Live”]=WanderingTrader(self)/Patrolman(self)
AI[“Combat”]=InitiativeMonster(self)/PassiveMonster(self)
AI[“Task”]=TaskNPC(self)
#状态机管理器
classPassiveMonster:
def__init__(self,owner):
self.addstate_fsm(combat_fsm)
self.addstate_fsm(dead_fsm)
self.addstate_fsm(comeback_fsm)
self.addstate_fsm(runaway_fsm)
self.addstate_fsm(tracetarget_fsm)
defthink_all(self):
if…:
self.changestate(…)
else…:
self.changestae(…)
defon_msg(self,msg):
ifmsg==‘stop’:
self.changestate(comeback_fsm)
对于以下三种不同情况的处理:
1AI的组成和运行方式相同,而外界条件数据不同的处理:
例如:
一个是血少于20%,逃跑;一个是血少于15%,逃跑;
解决:
在设计每个状态的时候,提取这个状态的可变量决定属性,放置到NPC配置属性当中。
2AI的组成和运行方式相同,所作的行为选择不同的处理:
例如:
都是血少于20%,一个为逃跑,一个为呼唤同伴;
3AI的组成和运行方式相同,存在多种选择:
例如:
血少于20%,选择逃跑或者呼唤同伴;
解决2、3问题:
为每种行为状态设定选择成功机率,当条件成熟后,根据行为的选择机率进行选择,如果是唯一选择,则几率为100%;如果为1-100之间的几率,都没有选中的话,则默认选择并列行为中的第一个(也就是看后面的行为是否被选中,替换第一位的那个并列行为,这样可以不用进行第二次循环选择)。
第二节NPC智能切换关系
关键的数据表现就是有没有进入战斗状态,来转换人工智能组,也就是相当给NPC换了一个脑袋。
那么例如被护送的NPC,如果要求它在任务没有触发前还可以攻击的话,那么实际上它身上存在三个AI组,第一个为生活AI,第二个为普通战斗AI,第三个则是护送任务AI。
那么这里就有很明显的区分标志,在没有发现敌人的情况下,且触发了护送任务,实际上它进入的另外一种生活状态,当遇到敌人的时候,进入战斗AI。
第三节决策系统对状态机的影响
决策系统是通过调用当前状态的消息响应函数进行工作。
例如:
当一个战斗状态正在进行的时候,发生了沉默事件,当前正在执行的状态我们是知道的,存放在NPC.current_fsm中,通过调用NPC.current_fsm.on_msg(“event”)的方式,向这个状态发送消息(实际上一个调用),如果这个状态是一个战斗状态,那么就要相应这个沉默消息,正在进行的施法就要被中断,返回上级的决策系统;至于下次选择技能的时候,则是技能选择系统通过对自身状态的监测(在状态列表中是否存在不能释放法术的标志),来进行判断是否可以进行法术技能的选择;如果当前的状态与是否造成技能中断没有直接关系,那么可以空运行一次响应函数。
第四节决策系统的构成
一、对象选择系统:
主要根据仇恨规则来选择当前的攻击对象。
对象的添加和删除:
对象死亡、消失、对象错误;
警觉范围、造成伤害、为仇恨列表中的对象治疗;
队伍规则、团队规则;
仇恨值的计算:
技能本身携带的仇恨值累计;
普通攻击转换仇恨值累计;
临时仇恨的增减累计;
选择规则:
仇恨最高;
职业中仇恨最高;
二、战术选择系统:
主要根据自身属性、逻辑定制选择当前的使用战术。
1战术列表的建立:
战术列表主要牵扯的问题是:
该NPC具有哪些战术类型,具体的战术动作则是由战术选择、技能选择和武器选择的共同决定的结果。
为每种战术指定技能组。
例如:
一个战斗NPC具有:
战斗-治疗-逃跑-呼唤
战斗这个环节使用什么武器或者技能则是由技能选择和武器选择的结果决定使用哪个攻击技能或者武器。
治疗环节则是由技能选择的结果决定使用哪个治疗技能或者物品。
逃跑环节基本上是属于公用环节,但是也可以定制,例如:
必须沿着指定的路逃跑;也可以在某个范围内随机移动。
呼唤环节则使用定制广播器进行广播,使周围的NPC协同攻击。
那么我们就确定了有些什么可以用。
然后决定怎么用和怎么组织。
2选择规则:
首先要确定一个默认进入战斗之后的第一战术。
例如:
默认的进入战斗以后的第一个战术一般都是为战斗,也可以默认为呼唤,弱小的NPC可以默认为逃跑(至于怎么逃,则是逃跑这个行为本身的逻辑)。
3类型划分:
这种选择规则基本都是定制的,那么为了减少定制的数量,我们进行分类整理,具体数据采用外界配置的方式,来减少定制的数量;当然Boss级的多战斗阶段需要定制:
总结下:
<1>战士型:
一般没有逃跑行为,使用单一武器/技能攻击。
<2>法师型:
具有逃跑行为,近身使用武器攻击,远程使用法术攻击,逃跑后具有呼唤同伴的能力。
其中包括创建新对象的能力,直接或者间接的参加战斗。
<3>骑士型:
除战斗本身外具有自我治疗和辅助治疗功能。
<4>猎人型:
具有宠物,指使宠物攻击,并在限制对手移动方面具有很高能力,然后撤出相对远的距离进行远程攻击。
三、武器选择系统:
主要根据距离、自身属性、战术要求来选择当前武器。
1武器列表的建立:
建立武器列表;只有武器编号一项。
(现在武器是直接做在NPC身上的,建议分开制作,绑点连接武器,只有两种情况,一种是持有武器,一种是不持有武器,不建议制作一个NPC可以更换多种武器)
在没有可更换和可拆卸武器的情况下:
当前版本情况下,直接将攻击数据配置在NPC身上,如果将来使用挂接武器方式,则直接从武器本身获得数据。
(就是空手攻击数据,也就是一项最简的攻击技能。
)
2武器更换:
暂不考虑
3选择规则:
暂不考虑
四、技能选择系统:
主要根据本身技能配备、自身战术要求、自身属性、外来消息选择当前使用的技能。
1技能列表的建立:
以技能编号的方式罗列,类型(伤害、治疗、召唤、控制),优先度,概率;
2选择规则:
给出这个NPC使用某个技能的优先程度以及选择相同类型技能的概率。
<1>按照距离:
<2>外加逻辑:
同一类型的NPC的人工智能基本为相同类型。
属于定制。
释放过程:
按照技能流程和战斗流程释放。
第五节数据项描述
1对象列表(仇恨列表)
2技能列表
3武器列表
4法术状态表
5状态机名称列表
第六节类描述
1模版类:
功能模版:
定制部分AI组的基本的逻辑,作为模版。
2接口部分:
对对象数据的读写操作:
获得对象属性的当前值,
获得对象的法术状态列表内容,
模块间调用的消息/参数描述:
事件的定义和类型:
中断
事件的参数:
根据具体情况自定义事件参数,并能够解析其内容。
3规则部分:
AI逻辑部分要分类的进行定制。
策划的逻辑规则,例如仇恨表里面添加一个对象还是将这个对象的队友也添加进去等,尽量模块细化,用小模块拼合的方法来作用。
公式部分:
对于每个模块的计算公式,将其转换为参数详尽的普通运算式。
片外编:
其它系统
评估系统:
评分制度,任务优先级规则,任务承接和放弃(注1任务:
NPC的下一个行为)
聚集任务
生成所有可能分配
根据分数为可能分配分类
分配给任务执行者