2dfm吧 关注:2,099贴子:39,699
  • 19回复贴,共1

【干货】脚本AI制作简介

只看楼主收藏回复

在介绍脚本AI前,希望大家对2dfm有个清醒认识:
2dfm这个软件玩的主要是思路,而不是编程能力,因为即使你有很强编程能力,这软件本身的功能限制也注定你巧妇难为无米之炊
但很多制作方法其实都是用反常规思路的,反而效果非常好,制作也简单,能实现许多不可思议的功能(《斗魂》就是一例,提供了数十种额外功能,但2dfm所提供的变量资源还是有富余,很多高级功能根本不使用任何变量,而使用特殊思路制作的)
简而言之:这软件看似简陋,其实很强大,很多特殊功能的制作其实考验的是你的创意,而不是你学没学过编程(更加直白地说,学过编程也基本没啥用)
简单介绍一下脚本AI的制作(通常来说脚本AI的制作,我们都是回避的,因为它破坏游戏公平性):
【一】脚本AI的制作前提
这些手段是你必须会的,否则谈不上制作脚本AI。说到2dfm游戏制作的高级技术,其实指的就是这些(至于说你制作个什么扔飞镖、霸体、当身之类功能的招式,那都是低级制作水平领域的东西,以为制作理念上并没有什么真正技术含量的东西存在,而我在这里介绍的东西,大部分人是想不到的,或者根本不会朝这个方向想的)
1-------区分玩家和电脑:
脚本AI制作的前提是你会在2dfm中制作区分一个人物目前是被玩家控制还是被电脑控制的功能,具体的方法很多,但都需要使用变量,思路都是一样的:
在选人界面,人物的“海报”招式项目(默认22号黑体字项目)将会在选人光标移动到人物头像时显示出来
所以可以利用这个招式,在其中加入响应指令输入的【令】脚本,当玩家按下任意攻击键(也就是选定当前人物)时,这个脚本跳转去设定某个人物私有变量(任务变量或者角色变量)数值为1
这个变量的数值就将在脚本AI中随时用来判断人物是否是被玩家控制,当并非玩家控制时,才激活AI有关的脚本
2--------将自己的数据转换为可供敌人探测的媒介
最常用方法是,给我方加挂一个与源同在的物体,带有伤区,但伤区在画面外特定范围内。你需要给你游戏中所有人物进行统一规划,画面外的巨大区域需要合理划分,每一个属性的每一个数值都应划分有自己的区域,以免其他属性或其他数值的探测道具进入造成探测结果错误
例如我可以在人物每次攻击时,让他生成一个物体携带一个纵坐标为4000的画面外伤区,而任何人只要带有一个同等高度的攻击区,攻击命中这个伤区就可以知道我的人物处于攻击状态
而只要我的人物在非攻击状态时令这个伤区消失,敌人通过攻击检测不到这个伤区,就可以知道我方处于非攻击状态
再比如:我攻击力为100以下时,我还是使用刚才说的那个伤区来告诉敌人我的攻击状态存在。但我攻击力高于100时,我用另一个纵坐标5000的伤区来告知对手我不仅处于攻击状态,而且攻击力高于100
类似方法可以用来传递数据,只要你规划好什么数值生成什么位置的伤区,而对手有对应检测的手段即可
3--------建立探测手段
比如说我制作了某种机制来让战斗中的人物随时去知道对方与自己的水平距离大概在什么范围
一般可以用我的人物自带的一个画面外攻击区去探测对手人物携带的画面外被抓属性的伤区,这种攻击不会对敌人造成任何影响,即不会打断敌人行动,也不造成伤害,是2dfm中最常用的探测手段,可以用来制作很多中探测功能
除此以外,画面外物体相互攻击命中后修改变量也是一种可选的常用办法
通常需要探测的东西包括:
《1》敌人和我方的距离:
我只需要给人物加挂一系列“与源同在”的物体(在画面外特定范围内),它们各自带有不同远距离的攻击区,而被探测的敌人需要加挂一个与源同在的物体带有受伤区域,与我的探测用攻击区处于同一画面外范围,而其他探测功能的物体永远不会出现在这个区域内,那么我就可以用这些攻击物体来检测敌人位置
例如我加挂的最近攻击区域可以攻击到距离人物横向200像素以内的物体,如果他攻击命中,就说明有人在我身边200像素以内,该物体攻击命中后会修改一个变量的数值,我人物本体的脚本AI判断这个数值就可以知道敌人进入了200像素范围内,从而跳转去200像素内那些作战策略的设置脚本去
《2》敌人状态:
敌人的每一种状态,其实都需要他自己来报告给我,敌人需要根据自己每个状态来设置一个变量值,当然他自己不需要修改变量,这些都是在游戏之外设计框架时制定好的,什么数值对应什么画面外区域的伤区,而我方的检测手段就是用一个该区域内的攻击区去检测这个伤区是不是存在,如果是,就由我方来修改自己的变量存储这个状态数值(也就是探知了敌人状态)
4-------根据不同变量的数值所代表的情况来给电脑人物设计对策:
而所谓对策就是根据对应变量数值去做一个招式跳转
比如说,我检测到敌人距离我方200像素以内(用那一系列距离判断的攻击物体获取敌人位置,并且只有200像素范围的那个命中了,把某个我人物用来记录敌人位置的变量的数值修改成1。是1也行,是其他数值也行,反正你自己要知道这个数值表示敌人就在200像素距离以内的含义),且敌人蹲着(敌人所有蹲着的招式都创建一个物体携带某个特定画面外区域内的伤区,非蹲着的招式都没有这个伤区。我有个监测对应位置伤区的攻击物体,攻击命中就说明敌人是蹲着的,并且修改某个我用来记录敌人站蹲状态的变量数值为1,表示敌人蹲着),我用一系列变量数值判断脚本判定敌人既在200距离以内,又蹲着,于是跳转去人物的某个中段技,在游戏中看起来就是:
敌人靠近我方小于200像素时蹲下,我方自动判断这个情况并使用出了某个中段技


1楼2013-12-18 05:28回复
    【二】脚本AI的实质
    1--------脚本AI存在于何处?
    用一个独立招式去制作判断各种变量数值(这些变量数值表示敌人的不同状态或者我方的不同状态)并进行招式跳转,这就是脚本AI,所以说脚本AI存在于独立的招式项目内,而且不仅限于一个项目,可以是许多项目之间通过跳转联系成的脚本网络
    2--------脚本AI如何被使用?
    在人物攻击招式的开头对脚本AI专用的独立招式项目进行【调】用,换而言之,人物每次出招时,先检测脚本AI,然后进行跳转
    例如我用2dfm默认的AI设定人物在距离敌人200像素时使用站立出拳的招式,那么这个招式被电脑使用时,他会先判断敌人情况,然后进行招式跳转,他有可能会直接跳转去下蹲扫腿那个招式(虽然它使用的是站立出拳,但因为跳转在站立出拳动画之前就进行了,所以站立出拳的动画将不播放,看似是直接出了一招扫腿)
    你要记住的是:
    电脑使用的招式只是一个判断脚本依附的载体,无论电脑出什么招,只要这一招开头调用了脚本AI,那么实际上这一招就是电脑用来判断敌人状态并采取对策的,至于这一招自己的攻击动画是什么,那时只有在玩家使用这个人物的时候才激活的(或者电脑决定用这一招的时候才跳转回来用)
    你可以理解为:
    当一个电脑控制的人物战斗时,他出任何招式都不是为了出招而出招,他出招就只有一个目的:判断玩家的状态
    所以,一个拥有脚本AI的人物,他虽然也有2dfm默认的AI策略,但那些策略其实是用来指定一个作战对策框架
    比如说我设计的人物,在地面时有很大概率使用站立直拳这一招,这一招其实对玩家是站立直拳,对电脑来说,它的真正含义是【调用测试敌人是否扔出飞镖的脚本AI】的招式,换句话说,电脑使用这招不是为了出站立直拳,而是因为站立直拳这招开头调用的脚本AI专门用来判断对手扔没扔飞镖,电脑出这招其实就是为了探测敌人仍没扔飞镖
    如果敌人扔了飞镖(我方通过某种攻击物体探测机制知道对手扔出了飞镖),这个脚本AI还会继续判断敌人飞镖的位置,然后根据不同位置结果决定我方接下来是要跳过飞镖还是原地防御(自然就是分别跳转去跳跃招式或者防御招式)
    3------脚本AI工作截止
    所有脚本AI最开头都要检测人物是否被玩家控制,如果是,那么脚本AI自动跳转到【调】用它的招式后面真正的招式动画,也就是说玩家使用站立直拳就不能探测对手飞镖是否存在,而是一个真正的站立直拳,只有电脑使用这招的时候会自动探测对手飞镖并做出反应


    2楼2013-12-18 05:48
    回复
      综上所述:
      脚本AI其实就是一个电脑人物进行作弊的反应系统,电脑人物通过探测对手各种数据,然后按照事先制定好的对策跳转去克制敌人行动的招式去
      当然这里面可以有很多随机性的东西(用【随】脚本来设置跳转),也可以有电脑故意放水的策略,还可以设定一个AI难度变量去控制电脑使用哪个系列的对策(可以把聪明的或者傻的策略分成不同脚本AI招式供调用),但总体而言,电脑终归是在作弊的,其一切反应都是探知了对方数据的前提下进行的
      脚本AI特点有3:
      1-------2dfm不同于mugen,mugen中许多状态参数,都允许人物之间互相调用甚至修改,所以脚本AI天然地有很多可以用来作弊的参考数据,而2dfm中绝大多数关键数据都是禁止被敌人角色知道的,更不能调用甚至修改
      你在2dfm中将很难知道敌人的关键信息(比如是否处于受伤状态,是否处于攻击状态,输入了什么指令,血量还剩多少,还有多少能量,是否当前使用了超杀等,这些在2dfm里你都不可能知道。但在mugen里你天然就能知道这些)
      如果你想要探测敌人,那么除非敌人配合你做了很多报告数据给你的功能,否则你什么都获得不了,说到底,2dfm是天然反作弊的,你想作弊也得敌人同意配合
      2-------脚本AI虽然在制作技术上看似很高端,但在格斗游戏理念上是不入流的:
      你的人物依赖脚本AI战斗时,能做出反应完全是靠知道敌人在干什么,头疼医头脚疼医脚
      而不是靠宏观把握战略战术,用格斗游戏的一些通用战术规律去制约敌人
      在2dfm中依赖脚本AI就意味着你的人物必须有很强大的探测能力,但同时意味着敌人可以伪造数据欺骗你的人物做出不利反应,或者更简单的做法:不给你提供任何可探测数据用的画面外防区,你没有数据可用,只能做一些盲目的抵抗
      而2dfm默认的AI的设计,要求设计者真正对格斗游戏的战略战术有深刻的理解,根据一些通用战术规律去设计战术策略,使这个人物面对未知对手的时候,战略战术仍然有很强的普遍适用性
      3-------脚本AI可以制作出玩家操作时无法打出的连招甚至取消,因为它是根据判断脚本直接做招式跳转,完全无视招式发动的条件限制
      这也意味着,如果你制作经验不丰富,很容易穿帮(比如说玩家在倒地时是不可能立即爬起来反击的,但你如果制作脚本AI疏忽了,你的人物就能做到),格斗游戏历史上的所有商业游戏本质上都是脚本AI,很多类似的“事故”屡见不鲜,最后的下场就是被玩家唾骂电脑作弊


      3楼2013-12-18 06:11
      收起回复
        冒个泡,签个到


        4楼2013-12-18 07:38
        回复
          原来我玩MUGEN上的KOFZ一直被虐是电脑作弊。。。。。


          IP属地:贵州5楼2013-12-19 17:08
          收起回复
            编译了脚本AI后是不是在人物剧情模式里作为CPU时“AI等级”这个设置项就无效了?


            IP属地:上海6楼2015-07-09 19:28
            收起回复
              其实个人认为脚本AI的最大作用就是使对战双方可以即时知道对方与自己的距离以及活动状态(攻击、防御、必杀等),而这个作用实际上在人物的CPU设置里都提供了,之所以还要做脚本AI,是因为CPU无法在对战模式下使用,因此属于一种无奈之举。本人设想是否可以通过修改软件内置代码,来实现对战模式下让P2能够使用CPU AI,这样就避免了制作脚本AI的麻烦,也不容易出现BUG


              IP属地:上海来自Android客户端7楼2016-04-14 09:49
              收起回复
                另外我说的CPU AI并不是单纯地使用软件提供的AI设置功能,而是配合相应脚本实现AI多样化。比如,对方与自己距离在200以内时,调用一个随机策略,能量≥600时100%使用超必杀;能量<600时,40%用拳击,20%用踢击,20%后退,20%站立不动。


                IP属地:上海来自Android客户端8楼2016-04-14 10:00
                收起回复
                  我认为这样避免了编写纯脚本AI的麻烦,同时也方便了今后的维护和修改。


                  IP属地:上海来自Android客户端9楼2016-04-14 10:01
                  回复
                    用过还是觉得创造ai好


                    来自iPhone客户端11楼2023-07-19 15:49
                    回复
                      用过还是觉得创造ai好


                      来自iPhone客户端12楼2023-07-19 15:49
                      回复