从零开始的 RPG 游戏制作教程(第十期) - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
DreamerQQ
V2EX    程序员

从零开始的 RPG 游戏制作教程(第十期)

  •  
  •   DreamerQQ 2021-01-29 10:57:31 +08:00 1519 次点击
    这是一个创建于 1730 天前的主题,其中的信息可能已经有所发展或是发生改变。

    往期回顾

    前言

    第一期:制作基础场景

    第二期:让勇者和怪物登场

    第三期:基础的数值设计

    第四期:从理论的角度简单聊聊关卡

    第五期:制作物品和技能

    第六期:设置怪物掉落物并部署关卡怪物

    第七期:触发器与逻辑

    第八期:对话、按钮、变量、马甲

    第九期:信息反馈(上)

    接上期。

    本期将进一步拓展 [信息反馈] 的概念。

    上期我们讲述了信息反馈的时机、方式对人注意力的影响,也讲述了如何通过信息反馈来从精神层面奖励玩家。

    除了这些因素以外,信息反馈还可以增强游戏的吸引力。

    打击感案例:击退

    打击感在战斗类游戏中是很常见的反馈。

    格斗游戏中,轻击敌人,只会让敌人出现略微的后退,但如果使用连招加上重击,则往往会将敌人击飞。

    10-1.png

    在知名动作类游戏《鬼泣》系列中,甚至能够使用无限的连击手段,将敌人抛到空中,再飞击得极远。

    10-2.png

    在 RPG 中,一些基础的招式只会具备简单的特效,而复杂的、高级的招式则往往会有一连串炫酷复杂的表现效果设计,并且附带会持续较长时间的其它效果。

    10-3.png

    让我们回到具体的例子。

    在魔兽争霸,打开单位编辑器,我们可以看到,在各个单位中,我们都可以设置他们攻击的声音。

    10-4.png

    10-5.png

    农民的武器声音是金属轻砍,步兵的武器声音是金属中切,圣骑士的武器声音是金属重击。 远程攻击的单位,如牧师、狮鹫骑士,他们攻击的声音则来自于投射物特效模型。

    10-6.png 10-7.png

    这些即是魔兽争霸游戏基础的打击感。

    不过如果我们想要增强打击感,使得战斗效果更夸张,我们就得再花费些心思。 比如,我们想要制作出击退的效果。

    让我们先创建一张新地图。

    10-8.png

    在新的地图上,我们放上一个圣骑士和一个步兵,我们希望实现圣骑士击中步兵后,能够击退步兵的效果。

    打开触发编辑器,捕获步兵受到伤害事件。

    10-9.png

    为了功能实现的便捷起见,我们先无视掉 [条件] ,直接编写功能。 击退,即需要一个单位命中另一个单位时,让另一个单位向后滑动一段距离。 实现这个功能本需要我们自己编写逻辑,因为在标准的魔兽地图编辑器中并没有提供这种逻辑。不过由于我们使用的是基于 YDWE 的编辑器拓展 MOD,这意味着这个编辑器并不是标准的、魔兽争霸 3 自带的魔兽地图编辑器,而是包含了许多额外附加功能的编辑器。(编辑器拓展 MOD 的概念在附录中介绍)

    我们直接使用 YDWE 提供的冲锋功能。

    10-10.png

    10-11.png

    这条动作的功能,抛开其命名 [冲锋] ,实际上就是 [连续位移指定单位] 。 根据我们的需要来填入参数即可。 第 1 个参数,我们要位移的单位是受到伤害(被击中)的步兵。 第 2 个参数,我们要位移的方向是伤害来源到受伤单位(触发单位)的角度。 这一条,我们也有 YDWE 提供的拓展函数解决问题。

    10-12.png

    第 3 个参数,射程,即位移距离,我们修改为 200,避免后退过多。 第 4 个参数,持续时间修改为 0.5 秒,以实现瞬间击退的感觉。 第 5 个参数,刷新周期,1/0.03 ,约为 33,本参数影响动画的流畅度,即帧率。通常情况没有特别需要时,我们可以保持为 0.03 。如果地图上同时有很多冲锋逻辑发生,则需要考虑将刷新周期提高,从而降低帧率,以提高游戏运行效率避免卡顿。 后续参数则会影响单位和其它单位或地图上的装饰物的交互,根据需要修改。 最终 2 个特效,在本例中我们先不添加。

    10-13.png 10-14.png

    确定后进入游戏。

    10-15.png

    攻击后:

    10-16.png

    为了让表现效果看起来更夸张,我们可以加上烟尘效果。

    10-17.png 10-18.png

    保存后回到游戏。

    10-19.png

    可以看到步兵现在被击中后会带有浓厚的烟尘效果。

    此外,我们还可以根据攻击力的大小,来计算出击退的距离。 比如每 10 点伤害,会造成 50 点击退距离。

    使用逆天局部变量和计算类函数来计算和获取伤害值。(逆天局部变量的概念在附录中介绍)

    10-20.png 10-21.png 10-22.png

    得到如下的动作。

    10-23.png

    然后通过读取逆天局部变量,来获取我们刚才计算出的变量值。

    10-24.png

    回到游戏后,可以测试出现在被击单位后退的距离会和受到的伤害相关。

    10-25.png

    在实际测试中,0.5 仍然是非常慢的数字,并不符合打击后瞬间击退的感觉。 我们将数字修改为 0.3,以贴合我们的效果。

    10-26.png

    回到游戏后测试,效果好多了。

    高级装备的信息反馈:击中特效

    我们还可以通过增加击中特效来改变一个装备给人带来的观感。 比如假设我们的圣骑士现在手里拿着的是 [雷霆之锤] 之类设定的武器。 这种武器在命中的时候会造成落雷效果,从而直观地从攻击效果上就让人感觉到不同。

    这个效果仍然建立在 [命中] 时。

    让我们直接编写效果。

    10-27.png

    在这个触发器中,我们判定只要造成伤害的单位是圣骑士,就会触发雷霆之锤特效。 同时在这个触发器中,我们记录了触发单位的位置,保存为逆天局部变量,同时在使用完这个点后清理它,这个原理我们将在下一期讲 [排泄] 的时候讲到。

    回到地形编辑器放置几个别的怪物。

    10-28.png

    然后进入游戏测试。

    10-29.png

    可以看到当圣骑士击中敌人后,会带出雷击特效。 现在这种特效是对单个怪物有效,但在实际制图中,我们就可以根据我们的需要,把这种效果修改得更为夸张。

    信息反馈的小结

    [反馈] 是一种很宽泛的概念。 在现实生活中我们能够做很多事情,并且很多事情必然会带来反馈。 打开水龙头,水管就会出水;把水龙头关小,水管的水就会是细流;开启电灯,灯就会亮;快速开关电灯,就会让电灯闪烁。 在海边,用力踢水就能踢出水花,如果按照规律去划,就能划出好看的涟漪。

    反馈本身就是一种有趣的东西,因而在游戏中给出合适的反馈,让玩家知道自己的投入在产生效果,并且适时根据需要来夸大这种信息反馈,适当地制造一些夸张效果,就能让玩家感觉到趣味。 信息反馈并不是一门技术,而是一种思路。 游戏本身是一种交互,交互就必定带来反馈。因而当玩家投入时间、投入行为,参与到游戏的互动时,游戏给予他们预期或超出预期的反馈,就能提高他们的兴致。但同时如果不满足他们的预期,也会降低他们的兴致或反向引起其它情绪。我们在设计中要做的,便是判定什么时候给予玩家反馈,怎样给予反馈会让他们觉得那是他们应得的,怎样又会让他们满足。

    概念:编辑器拓展 MOD

    魔兽地图编辑器诞生自魔兽争霸 3 发布的时候。原本的魔兽地图编辑器虽然已经可以完成很多功能,但那时的魔兽地图编辑器的作用并不是用于彻底地制造丰富功能的独立的地图,而是基于魔兽争霸 3 现有内容进行适当拓充。 因而在数十年的发展中,一大群魔兽地图制作爱好者聚集到一起,建立了诸多社区,并且在这种发展中,一群人贡献自己的力量,基于原生的魔兽地图编辑器做了很多功能性的拓充。 在所有的拓充中,现存最知名、影响力也最广的便是 YDWE 。

    10-30.png

    这些拓展 MOD 对原生的魔兽地图编辑器做了诸多修改,增加了许多额外的用于辅助制图的插件(比如脚本代码编译器、文本染色器)。

    本教程所使用的编辑器是基于 YDWE 进行二次拓充的、由魔兽争霸官方对战平台发布的地图编辑器。

    我们要理解的是,我们现在正在使用的编辑器并不是暴雪原本提供的编辑器,而是经过社区修改的、添加了许多额外功能的编辑器。

    因此,我们可能获得额外的便利,但也可能遭遇一些额外的麻烦。

    附 YDWE 百度百科介绍:YDWE 是由 everguo 、wataloo 、aeris 、actboy168 、SiNg 、Warft_TigerCN 、Fetrix_sai 几人(排名不分先后)从 WOW8 编辑器中的 UI 所改进的一个功能强大的魔兽地图编辑器插件(WE Mod),他的功能能让一个不会 Jass 的新手完成使用 Jass 才能办到的事情。

    概念:局部变量、逆天局部变量、全局变量

    局部变量,是指其作用域仅在特定 [函数] 内的变量,这在魔兽地图编辑器的脚本语言( JASS2 )中被使用。

    10-31.png

    在上图中,local string msg,即是为 Hello 函数,定义了一个名为 msg 、类型为 string (字符串)的局部变量。

    而逆天局部变量,则是作用域仅在特定 [触发器] 内的变量。

    10-32.png

    比如在雷霆之锤触发器中我们设置了逆天局部变量 p 为触发单位的位置,如果我们在别的触发器中读取逆天局部变量 p,我们并不会读取到任何值。

    逆天局部变量是由 YDWE 为魔兽地图编辑器拓展的一种额外的、便于实现复杂系统的功能。

    与局部变量对应的便是 [全局变量] ,即我们在触发编辑器中通过变量编辑器添加的变量,这种变量的数值一旦被修改,就会在整个游戏过程中被修改,影响到所有其它使用了这个变量的逻辑。

    全局变量通常是用于改变游戏进程的变量,比如到了多少关、游戏进入了什么阶段、刷怪的频率等等。

    10-33.png

    关于变量的介绍我们未来还会详细说明,但现在先暂时概述。

    1 条回复    2021-02-01 09:29:15 +08:00
    quan01994
        1
    quan01994  
       2021-02-01 09:29:15 +08:00
    支持,做一款地图,是我的愿望。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2507 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 35ms UTC 05:20 PVG 13:20 LAX 22:20 JFK 01:20
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86