V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
DreamerQQ
V2EX  ›  程序员

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

  •  
  •   DreamerQQ · 2021-03-19 11:50:27 +08:00 · 1291 次点击
    这是一个创建于 1345 天前的主题,其中的信息可能已经有所发展或是发生改变。

    往期回顾

    前言

    第一期:制作基础场景

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

    第三期:基础的数值设计

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

    第五期:制作物品和技能

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

    第七期:触发器与逻辑

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

    第九期:信息反馈(上)

    第十期:信息反馈(下)

    第十一期:排泄、运行效率

    第十二期:刷怪与防守(上)

    第十三期:刷怪与防守(下)

    本期讲述如何制作魔兽争霸 3 中并没有提供的、由我们自己撰写的技能。

    在一些教程中,技能被定义为一种需要克服和投入时间花费脑力琢磨的东西。但无论有多复杂的技能,其本质都是逻辑的组合。我们现在才讲述技能制作,正是希望你意识到,复杂的机制本身并不复杂,它只是由无数个小的逻辑组合出的东西。在前面的内容中我们已经进行了很多次逻辑实践,相信你现在已经具备了基本的逻辑编写和理解能力。

    技能大体分为被动技能和主动技能,区分被动和主动的是它们的触发方式。 主动技能的生效方式是 [施放技能] ,被动技能则需要玩家满足特定的条件,如击杀一个单位时。 因此,被动技能和主动技能还可以拆分,被细化为 [触发事件] 和 [效果] 。这正好对应了触发器中的 [事件] 和 [动作] 。

    在第五期中我们演示过如何直接基于魔兽现成的技能来制作新技能,现在我们回顾一下。 仍然以风暴之锤为技能模板,我们复制粘贴它。

    14-1.png

    假设我们想要的新的技能效果是,命中时会有 30%概率制造一次大爆炸,这个大爆炸会对被命中目标为中心,半径 500 范围的所有敌人造成它们各自最大生命值 20%的伤害。 很显然,风暴之锤的基础效果无法满足我们的想法。

    因此我们需要捕获到特定单位受到风暴之锤伤害这一事件,并在这基础上添加我们的逻辑。 不过,魔兽争霸 3 并没有提供单位受到指定技能伤害这一事件,因此像这种精准的效果并没有那么容易实现。

    让我们先简单粗暴地使用 [单位施放技能] 事件,把爆炸效果先写出来。随后我们再讲讲捕获技能事件的问题。

    实现爆炸效果,我们需要完成这些逻辑: 1 30%概率触发 2 获取技能命中目标所在点 3 选取半径 500 范围内所有敌人单位 4 为每个敌人单独造成各自 20%最大生命值的伤害

    14-2.png

    如图,在事件中我们可以找到任意单位事件,将第二个参数修改为 [开始施放技能] 。 同样我们需要判定只有当施放的技能是我们的新技能 [爆裂之锤] 时,才执行逻辑。

    下方的 [选取范围单位] 动作,来源于 [逆天] 分类。

    14-3.png 14-4.png

    该分类下有许多由 YDWE 为原生的魔兽地图编辑器拓展的功能,使用这些功能可以一定程度地为触发编辑器带来一部分面向对象编程的特性,对于今后制作复杂的机制、系统会有很大帮助。

    针对选取的单位,我们需要判断选取单位是否为 [活着的敌人] 。

    如下图。

    14--5.png 14--6.png

    如果不施加这个限制,会导致选取时会选中已经死亡的单位或者己方单位。 随后则是如下图,选用 [单位 -伤害目标] 来让施法者对目标单位具体造成伤害。

    14-7.png

    不过,如果只有这些,我们的技能就只会造成伤害但不会显示视觉效果。 让我们补上视觉效果。

    实际编写逻辑之前,我们聊聊技能特效。

    我们需要明白的是,魔兽争霸中自带的诸多特效已经是 2003 年的产物。即便在那时颇具竞争力,但快 20 年也早已让这个领域迭代了无数次。

    在魔兽地图社区中,有许多地图作者制作各类效果华丽的技能并发帖到社区中展示,但在魔兽争霸 3 这样的旧游戏中追求次时代效果,不可否认这是极其充满情怀和让人兴奋的事情,但我们也应当意识到使用魔兽争霸 3 制作游戏的优势并不在这里。

    魔兽地图编辑器的优势,于笔者看来,是其多年间的庞大社区资源积累以及编辑器本身具有相对完善的 RTS/RPG 游戏组件。换言之,其天然自带的诸多开箱即用的功能、以及周边社区的丰富资源,所带来的能够相对地使用低成本制作出效果还不错的成品或 Demo,才是其竞争力。

    魔兽地图编辑器不仅提供了一系列与特效相关的功能,也提供了控制模型动画、播放速度等功能。理论上、并且实际上也有爱好者这么做过,即我们可以使用编辑器来实现精准到像素的特效与模型动画结合、甚至实现动作类游戏的视觉效果,但这是一种极其耗时耗力的方式。

    这种向上的活力和突破的精神是值得钦佩的。但就本教程目的而言,我们至少希望你在制作中能够意识到游戏制作的维度是多方面的。如果想要成功制作出成品,你应当学会分配制作的精力,避免出现顾此失彼、甚至因为过于专注一个细致效果,导致项目整体进度大幅受阻乃至最终无法完成的问题。

    回到编辑器,在触发编辑器里找到动作中 [特效] 的分类。

    14--8.png

    这里我们可以看到除了最上方 3 条动作以外,下方还有标记为[YDWE]、[JAPI]的动作。 简单地说,这些动作都是由第三方拓展的、不属于原版魔兽地图编辑器的功能。

    在本期我们只需要使用原版功能,其它的暂时不做介绍。 选中第一条。

    14-9.png

    点击第二个路径参数,我们可以选择需要的模型作为爆炸特效。

    14-10.png 14-11.png

    在这里,我们选择 [燃烧之油 <投射物>] 作为模型,因为其爆炸效果显得更夸张。

    14-12.png

    我们将新动作创建在选取动作外,除非我们想要在每个单位身上都出现这种燃油爆炸。 以及清理掉先前创建的但是没有删除的点。

    然后我们还得删除刚创建的特效,否则这个特效会持续播放 Stand 动作,但我们需要的是爆炸效果,即燃油模型的 Death 动作。

    14-13.png

    然后,在物体编辑器中为圣骑士添加爆裂之锤并在地形编辑器中启用后,保存并进入游戏测试。

    14-14.png 14-15.png

    实际效果是,我们看到了特效,也施放出了技能,但没有造成伤害。

    14-16.png

    返回触发编辑器。

    14-17.png

    在选取动作中,造成伤害的动作目标是技能施放目标而非选取单位。 修复掉它。

    14-18.png

    再次测试。

    14-19.png

    好了,这次运转正常。

    再次回到编辑器。

    常见的一种技能机制是伤害和英雄属性挂钩,让我们演示如何让技能伤害关联英雄属性。

    14-20.png

    如图修改逻辑后,爆裂之锤便可以造成 [目标最大生命值 x20%+英雄力量 x10 ] 的伤害。 其参数链见下图。

    14-21.png

    到此,我们完成了一个自制技能,并且在这基础上还额外拓展过它(增加视觉效果、增加关联属性伤害)。

    不过就像前文提过的,目前这个技能仍然不完善——它的触发时机并非是在魔法锤命中敌人的瞬间,而是开始施法时。这意味着如果玩家在施法瞬间对单位发布停止( S 键)命令,就可能导致不耗蓝无限施放的 BUG 。 尽管这种时机并不容易把握,但如果想要解决这个问题,我们就得再下些功夫。 这个问题,让我们保留到未来再讲述。

    ————————————

    附:感谢魔兽争霸官方对战平台对本教程提供支持。 魔兽争霸官方对战平台是由网易研发运营,暴雪官方正式授权的官方对战平台。如果正在阅读本文的你对制作魔兽地图有想法、希望与平台探讨合作事宜,或正在寻求魔兽地图的商业变现,可通过官方平台提供的合作电子邮箱来沟通联系。 电子邮箱地址:warcraft3worldedit#service.netease.com (#替换为 @)

    2 条回复    2021-03-19 13:34:13 +08:00
    hullhutt
        1
    hullhutt  
       2021-03-19 13:20:03 +08:00
    10 年前,我一直想做 rpg 游戏,现在么,没精力,没时间
    yazoox
        2
    yazoox  
       2021-03-19 13:34:13 +08:00
    这是用 war3 编辑器“做”游戏么?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2405 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 02:00 · PVG 10:00 · LAX 18:00 · JFK 21:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.