<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>DreamerQW (DreamerQW)</title>
    <link>https://beta.w2solo.com/DreamerQW</link>
    <description/>
    <language>en-us</language>
    <item>
      <title>外包项目- 开发 APP（IOS Android 两版本）</title>
      <description>&lt;p&gt;项目需求：开发一款 APP（IOS Android 两版本）
上线时间：4 月初
参考竞品 APP：美丽修行
APP 主要核心功能：提供用户查询【国家药品监督管理局】备案网化妆品成分，地址：&lt;a href="https://www.nmpa.gov.cn/datasearch/home-index.html?79QlcAyHig6m=1675423594519#category=hzp" rel="nofollow" target="_blank"&gt;https://www.nmpa.gov.cn/datasearch/home-index.html?79QlcAyHig6m=1675423594519#category=hzp&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;对承包开发的个人或团队的需求：&lt;/p&gt;

&lt;p&gt;1、负责 APP 整体美术设计；
2、负责 APP 的 IOS 及 Android 的版本开发
3、按项目要求，独立完成软件设计文档、编码实现。
4、协助 APP 上架前的注册备案等资质申请，所需服务器的购买等操作
5、熟悉数据库整体搭建（必要条件）
5、开发处理上架后的相关 BUG，及上线保障
6、有 iOS/Android 客户端开发，3 年以上相关工作经验；
7、具备良好的沟通能力。&lt;/p&gt;

&lt;p&gt;如有兴趣，可加 wx：sywangqing 线上沟通！&lt;/p&gt;</description>
      <author>DreamerQW</author>
      <pubDate>Sun, 05 Feb 2023 13:53:24 +0800</pubDate>
      <link>https://beta.w2solo.com/topics/3727</link>
      <guid>https://beta.w2solo.com/topics/3727</guid>
    </item>
    <item>
      <title>《从零开始的 RPG 游戏制作教程》第十五期：地图发布，以及再见</title>
      <description>&lt;p&gt;往期回顾&lt;/p&gt;
&lt;h3 id="目录"&gt;&lt;strong&gt;&lt;em&gt;目录&lt;/em&gt;&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://indiehackers.net/topics/673" rel="nofollow" target="_blank" title=""&gt;1. 前言&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://indiehackers.net/topics/675" rel="nofollow" target="_blank" title=""&gt;2. 第一期：制作基础场景&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://indiehackers.net/topics/689" rel="nofollow" target="_blank" title=""&gt;3.第二期：让勇者和怪物登场&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/727" title=""&gt;4.第三期：基础的数值设计&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/745" title=""&gt;5.第四期：从理论的角度简单聊聊关卡&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/767" title=""&gt;6.第五期：制作物品和技能&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/774" title=""&gt;7.第六期：设置怪物掉落物并部署关卡怪物&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/782" title=""&gt;8.第七期：触发器与逻辑&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/811" title=""&gt;9.第八期：对话、按钮、变量、马甲&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/830" title=""&gt;10.第九期：信息反馈（上）&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/839" title=""&gt;11.第十期：信息反馈（下）&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/851" title=""&gt;12.第十一期：排泄、运行效率&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/902" title=""&gt;13.第十二期：刷怪与防守（上）&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/931" title=""&gt;14.第十三期：刷怪与防守（下）&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/939" title=""&gt;15.第十四期：自制技能）&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;欢迎来到第十五期。&lt;/p&gt;

&lt;p&gt;我们的教程从第一期开始到现在，已经从各个方面讲述过如何制作魔兽地图。
一张魔兽地图所包含的，不光是玩法。其实际制作过程中，涉及到场景的设计、故事蓝本的构思、脚本逻辑的编写、演出的设计、难度数值、玩法系统等方方面面，而这些内容又能够蔓延出软件测试、协同合作等等更复杂的分支。&lt;/p&gt;

&lt;p&gt;基于目前我们讲述的内容，已经可以制作出基础的、可玩的，甚至相对有趣的地图。
不过，完成地图只能说明我们的研发已经结束了，本期我们要讲讲发布的事情。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2021/e7b30bd7-1ebb-4cae-8761-3376fe38154d.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;《Indie Game: The Movie》片段&lt;/p&gt;

&lt;p&gt;在具体讲解如何发布之前，我们略微回顾一下魔兽地图发布方式的变化。&lt;/p&gt;

&lt;p&gt;在面向作者的平台出现以前，大多数对战平台仍然是以玩家创建主机，由玩家自行提供地图、自行找其他人一起玩的模式存在的。这在早期（2010 年左右）是非常普遍的情况，典型的 QQ 对战平台、浩方对战平台乃至 VS 对战平台等等。
在这个时期，魔兽地图发布后，要么是单机的战役，供玩家下载后自行游玩，要么是发布到各魔兽地图论坛、门户网站，如 U9、地图贴吧或一些魔兽玩家 QQ 群。&lt;/p&gt;

&lt;p&gt;这个时期，制作地图多是以爱好为主，获得的反馈也多来源于地图的下载量、玩家的评价、在门户网站上的排名，乃至网站的专题页面等。
发布地图后，地图制作者往往会创建 QQ 群，或在相应论坛版块、专区关注玩家反馈。&lt;/p&gt;

&lt;p&gt;U9 魔兽门户历史页面&lt;/p&gt;

&lt;p&gt;后来开始出现围绕地图作者、为地图制作者直接提供上传服务的平台，11 对战平台是那个时期的典范。从这个时候开始，地图作者可以直接将地图上传到对战平台，对战平台的角色在这个时期演变为了内容提供平台，魔兽地图能够上传到平台，平台负责提供运营支持、宣发支持等等（典型的如热门地图榜、新图榜、推荐榜）。&lt;/p&gt;

&lt;p&gt;这个时期虽然作者可以上传地图，也能在对战平台上留下评论，但建设性的信息往往仍然会在 QQ 群或专区版块中出现。在这个时期，制作地图的盈利方式也往往是私下定制，并没有明面上的商业化。
&lt;img src="https://img.way2solo.com/photo/2021/651c8b9e-c959-4fd4-be29-945c0edd5088.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;以上各时期，魔兽地图的制作仍然是一个偏向爱好者各自娱乐、是一种兴趣使然的事情。&lt;/p&gt;

&lt;p&gt;随后则是 2016 年末，获得暴雪正版授权的网易推出魔兽争霸官方对战平台（以下简称 “官平”）的入局。魔兽地图的商业化并非由官平最先推动，在 2016 年乃至更早，魔兽 RPG 的定制需求便已存在，各平台以及门户网站也纷纷投入该领域。但作为暴雪授权的平台，官平很快吸引了大量玩家，随后便积极建设作者发布地图的渠道，推进商业化部署。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2021/e13d8ca1-a4a8-4fd0-ac61-95847af6a842.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;商业化部署带来许多或正面或负面的问题，不过如果单从结果来说，官平的入局，对于魔兽圈的意义，则是标志着魔兽地图全面商业化的时代到来。
也因此，制作魔兽地图也成为了一件可以带来现金回报的事情，这也吸引了不少希望通过制作地图赚钱的人加入这个圈子。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2021/24b37b08-9e5a-4645-9b21-bed83adf3a3f.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2021/e2f94d5a-9b6c-4aa1-bb55-0c7f4437b9a6.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;正在阅读本系列教程的你，也许制作地图只是为了兴趣，或者为了别的游戏制作玩法演示 Demo。但现在，你实际上还有了额外的选项，便是制作地图，设计付费体验，并藉由魔兽争霸官方对战平台提供的魔兽地图编辑器内所提供的 DZAPI 系列功能，来实现魔兽地图和平台功能的链接。
&lt;img src="https://img.way2solo.com/photo/2021/5d5b4011-92bf-4179-9114-fcf759fd5089.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;DZAPI 能够让你在魔兽地图内实现将玩家的数据保存到服务器，进而一定程度上地实现在线角色扮演游戏的效果。同时，DZAPI 也能够判断玩家是否购买了某个商品、是否加入了指定公会等等与游戏运营相关的功能。&lt;/p&gt;

&lt;p&gt;换言之，从开发层面，魔兽地图的商业环境是多年沉淀下丰富的社区资源，以及目前仍然持续在运作并继续扩大的官平的支援。
不过劣势是，除了官方对战平台和 11 对战平台，魔兽地图目前并没有别的比较好的发布渠道，因此玩家群体口味存在一定的局限性，这就需要你自行权衡了。&lt;/p&gt;

&lt;p&gt;“利益” 这一因素的加入对于整个圈子所带来的影响是复杂的，更不用说魔兽圈原本首先是基于 “爱好” 而聚集的。&lt;/p&gt;

&lt;p&gt;我们不打算在本教程中探讨这种变革的好坏，但就结果来说，对于所有的魔兽地图制作者来说，除非他们制作的地图并不打算有任何变现的想法，否则他们就可以将自己的地图上传到地图平台，并通过后台上架商品，实现变现。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2021/ec59fd57-30f9-4515-9fe8-a079a314f7d0.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2021/9bc7716c-e81f-4b8a-a809-b904a2bca06c.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2021/5ef1ddda-888e-4c52-bcf1-6ae4293f3d60.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;我们完成地图后，可以选择将其上传到官平的作者后台，随后就能直接在官平的测试服中访问。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2021/de4beb2d-21c9-4807-9c72-616e8f3b9848.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2021/72888512-0538-48cc-9718-2239059ae049.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;当你完成地图研发、完成地图上传和相关文本填写后，你就能够在平台上获得一份你的地图的位置。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2021/bc3f4258-b06a-4fb3-ae49-b9933ed5215a.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;平台也支持多次更新地图版本，因而即便地图有问题，也可以通过持续更新来修复。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2021/04c2e660-1f64-4b6a-8ccd-d7677f386daf.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;关于魔兽地图发布环境，以及目前官平的概览暂且说到这里。&lt;/p&gt;

&lt;p&gt;如果你对此感兴趣、希望了解关于地图开发乃至商业变现的详情，你可以直接通过电子邮箱联系官方平台：
warcraft3worldedit#service.netease.com（# 替换为 @）
官方平台也始终希望有更多游戏制作团队参与魔兽地图的制作，如果你在寻求机会，也可通过上述邮箱与官方对战平台直接联系。&lt;/p&gt;

&lt;p&gt;————————————&lt;/p&gt;

&lt;p&gt;接下来我们讲讲本教程的未来。
如同我们曾经在前言中所提到的：“本教程是以普及成体系的游戏制作知识为目的而撰写的一套入门级的角色扮演游戏制作教程和进阶指南。”&lt;/p&gt;

&lt;p&gt;在官平的支持下，本教程在目前为止的十多期，约一个季度的连载中概述了魔兽地图的制作知识。目前关于如何制作魔兽地图，本教程已经对各方面均进行了入门介绍，无论是场景的制作、数据的编辑，还是脚本逻辑的编写、具体游戏数值和体验的把控，也略微地提过关于软件测试的内容，等等。
想要详实而完全的讲述一个游戏项目的所有方面是不现实的，因为游戏是一种变化性的、乃至充满创造性的、特殊的软件。我们提供了诸多方向以及相关的实践介绍，而接下来的深入研究类的文章，在社区内已经有许多人做过更多、更具体的教程。&lt;/p&gt;

&lt;p&gt;重复地去讲述他人已经讲过的内容在我们看来并不是什么对于制作有帮助的事情，因为项目的制作，终究需要作为制作者的你能够自行根据需要找到自己想要的问题答案。
我们认为目前本教程已经达成了引领新手入门的目的，因此，我们决定本期之后，本系列教程的连载将告一段落。&lt;/p&gt;

&lt;p&gt;关于更多的学习资源，你可以在这些地方寻找：&lt;/p&gt;

&lt;p&gt;百度魔兽地图编辑器吧：
&lt;img src="https://img.way2solo.com/photo/2021/7125b870-8879-403d-af9e-3a14d9a36539.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;网易云课堂提供的魔兽地图编辑器教程：&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2021/26646ae0-2d72-460a-bfb1-7531ef5fbc4e.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;GA（地精研究院）论坛：
&lt;img src="https://img.way2solo.com/photo/2021/33af2b0c-9a16-4882-8c29-840810bc90e9.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;以及，通过腾讯 QQ 搜索 “魔兽地图编辑器”，便可找到大量与魔兽制图相关的 QQ 群，在这些群的群共享文件中，往往可以找到各类教程资源。&lt;/p&gt;

&lt;p&gt;到结尾的时候了。
尽管本教程并不是专业级的教程，但正如前言所说，我们希望你能够通过本教程理解到除了游戏制作以外的东西，对游戏制作建立你自己的理解。
正如本期讲述地图发布，除了发布渠道的变更史，各种教程、技术现状，往往也和各类因素有关。而在所有因素中，最核心的因素便是人。
在前进中，除了对制作本身的钻研，也不可忽略人对事情的影响。&lt;/p&gt;

&lt;p&gt;“愿你历尽千帆，归来仍是少年。”
——那么，再见了。&lt;/p&gt;

&lt;p&gt;————————————&lt;/p&gt;

&lt;p&gt;附：感谢魔兽争霸官方对战平台对本系列教程的支持和赞助。&lt;/p&gt;

&lt;p&gt;魔兽争霸官方对战平台正在招募游戏研发团队中，如果你希望了解更多关于魔兽地图制作的信息，欢迎联系魔兽争霸官方对战平台！
合作邮箱地址：warcraft3worldedit#service.netease.com（# 替换为 @）&lt;/p&gt;</description>
      <author>DreamerQW</author>
      <pubDate>Mon, 22 Mar 2021 19:26:20 +0800</pubDate>
      <link>https://beta.w2solo.com/topics/1026</link>
      <guid>https://beta.w2solo.com/topics/1026</guid>
    </item>
    <item>
      <title>《从零开始的 RPG 游戏制作教程》第十四期：自制技能</title>
      <description>&lt;p&gt;往期回顾&lt;/p&gt;
&lt;h3 id="目录"&gt;&lt;strong&gt;&lt;em&gt;目录&lt;/em&gt;&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://indiehackers.net/topics/673" rel="nofollow" target="_blank" title=""&gt;1. 前言&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://indiehackers.net/topics/675" rel="nofollow" target="_blank" title=""&gt;2. 第一期：制作基础场景&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://indiehackers.net/topics/689" rel="nofollow" target="_blank" title=""&gt;3.第二期：让勇者和怪物登场&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/727" title=""&gt;4.第三期：基础的数值设计&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/745" title=""&gt;5.第四期：从理论的角度简单聊聊关卡&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/767" title=""&gt;6.第五期：制作物品和技能&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/774" title=""&gt;7.第六期：设置怪物掉落物并部署关卡怪物&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/782" title=""&gt;8.第七期：触发器与逻辑&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/811" title=""&gt;9.第八期：对话、按钮、变量、马甲&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/830" title=""&gt;10.第九期：信息反馈（上）&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/839" title=""&gt;11.第十期：信息反馈（下）&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/851" title=""&gt;12.第十一期：排泄、运行效率&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/902" title=""&gt;13.第十二期：刷怪与防守（上）&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/931" title=""&gt;14.第十三期：刷怪与防守（下）&lt;/a&gt;&lt;/p&gt;

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

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

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

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

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2021/31331bc1-52ca-4aed-a3a2-492d26b2f569.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

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

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

&lt;p&gt;让我们先简单粗暴地使用【单位施放技能】事件，把爆炸效果先写出来。随后我们再讲讲捕获技能事件的问题。&lt;/p&gt;

&lt;p&gt;实现爆炸效果，我们需要完成这些逻辑：
1 30% 概率触发
2 获取技能命中目标所在点
3 选取半径 500 范围内所有敌人单位
4 为每个敌人单独造成各自 20% 最大生命值的伤害
&lt;img src="https://img.way2solo.com/photo/2021/cee4174d-8f34-4d51-989b-33afa831ee75.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

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

&lt;p&gt;下方的【选取范围单位】动作，来源于【逆天】分类。
&lt;img src="https://img.way2solo.com/photo/2021/c0ccc63b-c0fd-4923-a51f-ffd8ec307b5e.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;
&lt;img src="https://img.way2solo.com/photo/2021/12d57b44-1634-4e37-9074-05fae9ed9d31.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

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

&lt;p&gt;针对选取的单位，我们需要判断选取单位是否为【活着的敌人】。
如下图。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2021/fa2e491f-7e1c-4093-a0fb-14d9da8ed489.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2021/e8d7364c-0f29-490d-a0cd-c1e24a1ee4c4.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2021/2ccc8aed-4bfa-48be-8fad-1fc3d8dba912.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;不过，如果只有这些，我们的技能就只会造成伤害但不会显示视觉效果。
让我们补上视觉效果。&lt;/p&gt;

&lt;p&gt;实际编写逻辑之前，我们聊聊技能特效。
我们需要明白的是，魔兽争霸中自带的诸多特效已经是 2003 年的产物。即便在那时颇具竞争力，但快 20 年也早已让这个领域迭代了无数次。
在魔兽地图社区中，有许多地图作者制作各类效果华丽的技能并发帖到社区中展示，但在魔兽争霸 3 这样的旧游戏中追求次时代效果，不可否认这是极其充满情怀和让人兴奋的事情，但我们也应当意识到使用魔兽争霸 3 制作游戏的优势并不在这里。&lt;/p&gt;

&lt;p&gt;魔兽地图编辑器的优势，于笔者看来，是其多年间的庞大社区资源积累以及编辑器本身具有相对完善的 RTS/RPG 游戏组件。换言之，其天然自带的诸多开箱即用的功能、以及周边社区的丰富资源，所带来的能够相对地使用低成本制作出效果还不错的成品或 Demo，才是其竞争力。
魔兽地图编辑器不仅提供了一系列与特效相关的功能，也提供了控制模型动画、播放速度等功能。理论上、并且实际上也有爱好者这么做过，即我们可以使用编辑器来实现精准到像素的特效与模型动画结合、甚至实现动作类游戏的视觉效果，但这是一种极其耗时耗力的方式。&lt;/p&gt;

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

&lt;p&gt;回到编辑器，在触发编辑器里找到动作中【特效】的分类。
&lt;img src="https://img.way2solo.com/photo/2021/35b55a9f-aafd-492f-9ec4-f3ff68e5dae2.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

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

&lt;p&gt;在本期我们只需要使用原版功能，其它的暂时不做介绍。
选中第一条。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2021/614a6c66-5092-46a9-b1f3-e49d21fdd0c5.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;点击第二个路径参数，我们可以选择需要的模型作为爆炸特效。
&lt;img src="https://img.way2solo.com/photo/2021/a154ed7a-b134-447e-9293-3216099f2a23.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;
&lt;img src="https://img.way2solo.com/photo/2021/8041eb84-e247-4ca9-8f4f-3830578526f2.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;在这里，我们选择【燃烧之油 &amp;lt;投射物&amp;gt;】作为模型，因为其爆炸效果显得更夸张。
&lt;img src="https://img.way2solo.com/photo/2021/c8dffe0a-d201-4091-b7d4-0f80d4c9b7fe.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

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

&lt;p&gt;然后我们还得删除刚创建的特效，否则这个特效会持续播放 Stand 动作，但我们需要的是爆炸效果，即燃油模型的 Death 动作。
&lt;img src="https://img.way2solo.com/photo/2021/273fd0d7-e94a-4098-be27-ed20bf9386e1.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;然后，在物体编辑器中为圣骑士添加爆裂之锤并在地形编辑器中启用后，保存并进入游戏测试。
&lt;img src="https://img.way2solo.com/photo/2021/57fc6876-01ed-4805-b5a2-2a49b1c42857.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2021/2623883f-4d80-410f-a418-f4a33f4ef887.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;实际效果是，我们看到了特效，也施放出了技能，但没有造成伤害。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2021/102f3a56-8946-47ec-abb0-91e55535202f.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;返回触发编辑器。
&lt;img src="https://img.way2solo.com/photo/2021/cfcce7f9-920f-4263-8714-fe0eed019279.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;在选取动作中，造成伤害的动作目标是技能施放目标而非选取单位。
修复掉它。
&lt;img src="https://img.way2solo.com/photo/2021/6c89ee02-b48a-49f5-9ea3-5c7f6efa605c.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;再次测试。
&lt;img src="https://img.way2solo.com/photo/2021/ec2f951e-d204-4317-874c-c13c9fab544d.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;好了，这次运转正常。&lt;/p&gt;

&lt;p&gt;再次回到编辑器。
常见的一种技能机制是伤害和英雄属性挂钩，让我们演示如何让技能伤害关联英雄属性。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2021/e81933f1-e569-40a5-9ed4-de4ab0587a68.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;如图修改逻辑后，爆裂之锤便可以造成【目标最大生命值 x20%+ 英雄力量 x10】的伤害。
其参数链见下图。
&lt;img src="https://img.way2solo.com/photo/2021/6ad1048d-3417-4c73-89a8-d25c1c28e4a9.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;到此，我们完成了一个自制技能，并且在这基础上还额外拓展过它（增加视觉效果、增加关联属性伤害）。&lt;/p&gt;

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

&lt;p&gt;————————————
附：感谢魔兽争霸官方对战平台对本教程提供支持。
魔兽争霸官方对战平台是由网易研发运营，暴雪官方正式授权的官方对战平台。如果正在阅读本文的你对制作魔兽地图有想法、希望与平台探讨合作事宜，或正在寻求魔兽地图的商业变现，可通过官方平台提供的合作电子邮箱来沟通联系。
电子邮箱地址：warcraft3worldedit#service.netease.com（# 替换为 @）&lt;/p&gt;</description>
      <author>DreamerQW</author>
      <pubDate>Fri, 19 Mar 2021 18:06:46 +0800</pubDate>
      <link>https://beta.w2solo.com/topics/939</link>
      <guid>https://beta.w2solo.com/topics/939</guid>
    </item>
    <item>
      <title>《从零开始的 RPG 游戏制作教程》第十三期：刷怪与防守（下）</title>
      <description>&lt;p&gt;往期回顾&lt;/p&gt;
&lt;h3 id="目录"&gt;&lt;strong&gt;&lt;em&gt;目录&lt;/em&gt;&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://indiehackers.net/topics/673" rel="nofollow" target="_blank" title=""&gt;1. 前言&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://indiehackers.net/topics/675" rel="nofollow" target="_blank" title=""&gt;2. 第一期：制作基础场景&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://indiehackers.net/topics/689" rel="nofollow" target="_blank" title=""&gt;3.第二期：让勇者和怪物登场&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/727" title=""&gt;4.第三期：基础的数值设计&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/745" title=""&gt;5.第四期：从理论的角度简单聊聊关卡&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/767" title=""&gt;6.第五期：制作物品和技能&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/774" title=""&gt;7.第六期：设置怪物掉落物并部署关卡怪物&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/782" title=""&gt;8.第七期：触发器与逻辑&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/811" title=""&gt;9.第八期：对话、按钮、变量、马甲&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/830" title=""&gt;10.第九期：信息反馈（上）&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/839" title=""&gt;11.第十期：信息反馈（下）&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/851" title=""&gt;12.第十一期：排泄、运行效率&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/902" title=""&gt;13.第十二期：刷怪与防守（上）&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;承接上期，本期将继续完善防守怪物的玩法流程。&lt;/p&gt;

&lt;p&gt;上期我们已经完成了刷怪的主流程，但如何判定玩家已击杀所有怪物，游戏如何胜利，我们还没有撰写。
本期我们要完成一个完整的游戏流程，包含胜利、失败。&lt;/p&gt;

&lt;p&gt;打开地图，我们来到基地区域。
&lt;img src="https://img.way2solo.com/photo/2021/2a145449-0d79-443f-856c-a3a9aee51daa.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;放置一个城镇大厅，把它作为我们的基地。
我们需要玩家保护城镇大厅，一旦它被摧毁，游戏就将失败。&lt;/p&gt;

&lt;p&gt;因此来到触发，编写如下逻辑。
&lt;img src="https://img.way2solo.com/photo/2021/d83cd792-7e93-4943-b53a-a7e74eaf320c.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;很简单地完成了游戏失败功能。&lt;/p&gt;

&lt;p&gt;然后我们要编写游戏胜利逻辑。
游戏胜利的逻辑可以有很多种写法，比如我们可以在每次玩家击杀敌人的时候判断地图上剩余的敌人数量和当前游戏的波次。如果剩余的活着的敌人的数量为 0，则游戏胜利。
我们也可以在最后一次创建了所有怪物后，将这些怪物添加到一个单位组中。当一个单位被击杀时，如果这个单位属于该单位组，则将其从单位组中移除。
当单位组中剩余的单位数量为 0 时，则说明所有的怪物都已完成击杀。
或者我们可以不使用击杀所有怪物作为胜利逻辑，而使用游戏时间作为胜利逻辑。
只要玩家能够坚持 35 分钟，游戏就会自动胜利。&lt;/p&gt;

&lt;p&gt;不过，在这里我们使用将最后一波的所有单位添加到单位组的方法。
&lt;img src="https://img.way2solo.com/photo/2021/6a35bf03-c11f-4505-bd70-384e58cf9726.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2021/d8c7362c-7d51-42a0-931d-9adc21b0d637.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;在这里，我们不能使用设置变量来把 monster_final 设置为最后创建的单位组，原因是【创建单位】这条动作并不是在每次创建一批单位时一并创建一个新的单位组，而是始终会清空一个魔兽编辑器内置的单位组全局变量，并把新的一批单位添加到这个全局单位组中。
因此如上图，我们应当把最后创建的单位组内的所有单位添加到我们自己的单位组全局变量 monster_final 中。&lt;/p&gt;

&lt;p&gt;创建一个新的触发器，我们可以使用 单位 - 在单位组 来判断死亡的单位是否属于最后一波。
&lt;img src="https://img.way2solo.com/photo/2021/bfc3faec-14b1-4f06-a85d-72c847ef0195.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;逻辑内容如下：
&lt;img src="https://img.way2solo.com/photo/2021/dd75ba86-84cb-4f93-9201-6fd1704c244a.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;一个需要注意的地方是，【单位组中单位数量】这一函数并没有被分类到【单位组】这个类别，而是被分类到了【单位】这个类别。
如上图进行撰写，每一次只要有 monster_final 中的怪物死亡时，本触发器就会执行。当 monster_final 单位组中的怪物全部被移除时，即单位数量为 0 时，游戏胜利。&lt;/p&gt;

&lt;p&gt;现在我们可以放置 4 个人族英雄，并预先放置一堆物品，用于测试这种对抗。
为了测试方便，我们启用 T1 中按下 Esc 刷出下一波搞怪的功能。
&lt;img src="https://img.way2solo.com/photo/2021/aeb924c3-ee8a-423f-8b4d-642473374797.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;
&lt;img src="https://img.way2solo.com/photo/2021/ffe3b763-4e97-4da7-a59a-50e4899844fb.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;除了放置一堆物品，我们也能够直接编辑地图上英雄的等级，并设置他们的技能等级。
&lt;img src="https://img.way2solo.com/photo/2021/39594ab7-d38c-465c-b1d9-1b78d0cc902d.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;保存后点击测试地图，开始我们的测试。
&lt;img src="https://img.way2solo.com/photo/2021/d0777c7b-f9a5-4028-bf7d-4d0f0f364da6.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;由于没有保护好基地，失败了。
然后我们想要测试胜利效果，进入游戏后可以输入无敌秘籍 whosyourdaddy，按 Esc 键召唤出怪物。
&lt;img src="https://img.way2solo.com/photo/2021/84d0ff35-8dcd-49ca-ad3b-61a27fb17cf9.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;直到消灭完狮鹫波次后，游戏胜利。&lt;/p&gt;

&lt;p&gt;好了，这样我们就又完成了一个完整的游戏流程。
这是一个没有什么丰富的拓展内容的游戏，但是它有目标、有胜利条件和失败条件。
它不一定能经得起很多次游玩，但是它能玩。&lt;/p&gt;

&lt;p&gt;不过就像我们实际测试中的体验，每 3 分钟如果没有任何提示，会让玩家不知道进度。如果怪物到来时没有任何信息提醒，也会显得突兀。
根据我们讲的【信息反馈】相关内容，我们来完善这些。&lt;/p&gt;

&lt;p&gt;首先，我们可以做一个计时器，用来让玩家随时查看距离下一波还有多久。
&lt;img src="https://img.way2solo.com/photo/2021/44a1dee8-f111-4eaf-8aed-242eef727caf.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;在变量窗口中添加两个全局变量，一个是计时器，一个是计时器窗口。
查看计时器相关的动作，我们可以发现计时器窗口需要被创建并和特定的计时器绑定。
&lt;img src="https://img.way2solo.com/photo/2021/edd15f8d-9d98-4c3e-9afb-bfa069be3abe.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;在【D1 游戏数据】中，我们初始化计时器窗口并运行计时器。
&lt;img src="https://img.way2solo.com/photo/2021/9a494b2c-cd6e-4a04-8ca8-e5efc83e0b07.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;修改【T1 刷怪系统】，我们将触发事件由每当时间过去 180 秒修改为计时器 monster_timer 到期。
&lt;img src="https://img.way2solo.com/photo/2021/f9225f34-bfce-4bf7-b908-765e948ee3a9.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;同时，我们需要在每次到期后，更新计时器窗口的文本，使得其显示下一波到来时间。
&lt;img src="https://img.way2solo.com/photo/2021/31828d97-ebf0-4e38-a973-2a1f6e59bd84.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;不过如果我们只是这样写，当波次为第 10 波时，计时器窗口仍然会显示。
因此我们要在第 10 波时隐藏计时器窗口，同时暂停计时器。
&lt;img src="https://img.way2solo.com/photo/2021/a41a5316-f9bb-4a54-baa1-ea529ce2ba1f.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;然后，当玩家进入最后一波后，为了让玩家容易理解，我们可以每当玩家击杀一个怪物后，都汇报剩余的怪物数量。
修改【T4 最终波次怪物死亡】触发器动作。
&lt;img src="https://img.way2solo.com/photo/2021/592b755f-2c0f-41d3-8a42-4785654c75ab.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;然后我们可以在玩家进入游戏后，显示一个提示信息，用于告知玩家游戏目标。
&lt;img src="https://img.way2solo.com/photo/2021/bef1a7d3-4183-4132-a383-ac69b13e0476.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;
&lt;img src="https://img.way2solo.com/photo/2021/a6c0ba01-7091-4c70-9f87-1cdb19515ef8.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;此外，我们可以在每一波开始时，预告下一波的怪物内容。
&lt;img src="https://img.way2solo.com/photo/2021/4b205fff-57b8-4f72-83a9-98419d5e4677.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;如上图创建一个新的触发器。
这个触发器没有事件也没有条件，我们可以在别的触发器中手动执行它。
需要预告下一波怪物的地方，是游戏开始、播放完提示信息后，和最后一波之前的每次刷怪时。&lt;/p&gt;

&lt;p&gt;修改 T5 触发器：
&lt;img src="https://img.way2solo.com/photo/2021/ce7f3a1e-3daa-4fd1-b50f-8bf900ca5899.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;修改 T1 触发器：
&lt;img src="https://img.way2solo.com/photo/2021/a5a20423-efb6-4990-8801-de6466c65c6f.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;在每次怪物到来时，目前没有任何攻击警告信息。
让我们加上它：
&lt;img src="https://img.way2solo.com/photo/2021/fb065190-9429-4cad-9dc8-4322b2ec7b74.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;分别为每一波怪物到来时的提示信息，和第 10 波提示本波为最后一波。
为了更醒目，我们还可以在刷怪的同时，增加一个小地图提示警告圈。
&lt;img src="https://img.way2solo.com/photo/2021/6b025b5e-0484-4d52-97b6-bc17b981be1e.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;进入地图后我们发现计时器对话框并没有显示，原因是【显示计时器窗口】不能在地图初始化时运行。
&lt;img src="https://img.way2solo.com/photo/2021/dceb9d1f-fca6-46d8-b7aa-e7442ada7824.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;如上图的动作注释。&lt;/p&gt;

&lt;p&gt;在触发编辑器中，一部分需要特别注意的功能的要点会被标记在注释中。不过并非所有有问题的动作都被标记了，这些坑往往会在实际开发中浪费大量时间。
因此始终确保在一张空白的地图里面去测试清楚某些功能是否运转正常，是有效规避意外的一种方式。
&lt;img src="https://img.way2solo.com/photo/2021/07f64853-4567-4c8b-b909-c6c836c3aab9.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;修复计时器窗口的问题，我们可以把运行计时器和显示窗口这一套动作放到新的触发器中。&lt;/p&gt;

&lt;p&gt;回到游戏，确认是否运转正常。
&lt;img src="https://img.way2solo.com/photo/2021/2a018ad6-12a6-450e-8675-019483436dc3.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;
&lt;img src="https://img.way2solo.com/photo/2021/14a535eb-d432-40e1-ac91-cc273c5fe3a2.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;好了，我们的目标完成了。&lt;/p&gt;

&lt;p&gt;现在回顾，显然刷怪系统本身并没有占用我们多少制作时间，反而是信息提示、数据录入、文本细节的调整占用了我们很多的时间。
游戏的实际制作也是这样的，主玩法本身很重要，但一款游戏包含的不仅仅是主玩法。除非一个地图只是为了自己玩或者和周围人进行试验，否则就会有很多其它工作要让我们完成。&lt;/p&gt;

&lt;p&gt;除了刷怪以外，在官方对战平台上，有很多基于防守玩法拓展的地图。
有些地图修改了波次间隔和数量，有些修改刷怪规则转而使用连绵不断的出怪方式，有些修改胜负条件，将地图怪物数量上限作为失败条件，有些会拓展刷出的怪物机制，除了魔兽常规的怪物以外，他们还会为怪物增加随机 BUFF、增强特定属性。
有些则是提供更丰富的可选的英雄、英雄技能、战斗机制、升级英雄的方式，取决于你想要如何设计地图玩法。&lt;/p&gt;

&lt;p&gt;同样，刷怪系统只是诸多系统的一部分，我们也可以围绕经营、随机事件、文本剧情，或是围绕提升某个物品来设计玩法，并制作相应的系统。&lt;/p&gt;

&lt;p&gt;目前为止，我们已经讲了很多基础知识和概要内容，下期开始，我们要走得更深一些了。&lt;/p&gt;

&lt;p&gt;————————————
附：感谢魔兽争霸官方对战平台对本教程提供支持。
魔兽争霸官方对战平台是由网易研发运营，暴雪官方正式授权的官方对战平台。如果正在阅读本文的你对制作魔兽地图有想法、希望与平台探讨合作事宜，或正在寻求魔兽地图的商业变现，可通过官方平台提供的合作电子邮箱来沟通联系。
电子邮箱地址：warcraft3worldedit#service.netease.com（# 替换为 @）&lt;/p&gt;</description>
      <author>DreamerQW</author>
      <pubDate>Thu, 18 Mar 2021 11:49:30 +0800</pubDate>
      <link>https://beta.w2solo.com/topics/931</link>
      <guid>https://beta.w2solo.com/topics/931</guid>
    </item>
    <item>
      <title>《从零开始的 RPG 游戏制作教程》第十二期：刷怪与防守（上）</title>
      <description>&lt;p&gt;往期回顾&lt;/p&gt;
&lt;h3 id="目录"&gt;&lt;strong&gt;&lt;em&gt;目录&lt;/em&gt;&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://indiehackers.net/topics/673" rel="nofollow" target="_blank" title=""&gt;1. 前言&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://indiehackers.net/topics/675" rel="nofollow" target="_blank" title=""&gt;2. 第一期：制作基础场景&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://indiehackers.net/topics/689" rel="nofollow" target="_blank" title=""&gt;3.第二期：让勇者和怪物登场&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/727" title=""&gt;4.第三期：基础的数值设计&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/745" title=""&gt;5.第四期：从理论的角度简单聊聊关卡&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/767" title=""&gt;6.第五期：制作物品和技能&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/774" title=""&gt;7.第六期：设置怪物掉落物并部署关卡怪物&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/782" title=""&gt;8.第七期：触发器与逻辑&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/811" title=""&gt;9.第八期：对话、按钮、变量、马甲&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/830" title=""&gt;10.第九期：信息反馈（上）&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/839" title=""&gt;11.第十期：信息反馈（下）&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/851" title=""&gt;12.第十一期：排泄、运行效率&lt;/a&gt;
我们已经讲了很多关于如何优化体验、实现特定系统、脚本逻辑的设计等基础知识。但除了在前期我们以剧情关为中心讲述单个关卡以外，我们已经很有没有提过游戏的主流程了。
本期我们再度聚焦到游戏玩法（Gameplay），关注游戏的主要流程。&lt;/p&gt;

&lt;p&gt;在魔兽地图的玩家社群中，除了 3C、DOTA 这类对抗类地图，还有一种炙手可热的地图类型是防守图。
这种地图类型之所以流行，是因为其简单易懂、便于制作，无论对于制作者还是对于玩家，都能很好、很快地接受其玩法。&lt;/p&gt;

&lt;p&gt;而 “防守”，顾名思义，整个玩法即是保护某个目标，抵抗入侵的敌人。
这来源于一个基础的系统：刷怪。&lt;/p&gt;

&lt;p&gt;周期性的、间隔一定时间按照特定规则刷出一定数量的怪物，并让这些怪物向基地进攻。
除了在地图上直接放置怪物以外，这种玩法是相较于塔防、自走棋、在线多人 RPG 等规则以外，制作难度更低的类型。&lt;/p&gt;

&lt;p&gt;本期就让我们从这里开始，先制作一个刷怪系统。&lt;/p&gt;

&lt;p&gt;打开地图编辑器，新建一个地图。
为了直观理解，我们创建一个纵向长方形的地图。
我们将要让怪物从上方出现，并攻向下方的基地。
&lt;img src="https://img.way2solo.com/photo/2021/8956aa2c-7f90-4957-96d8-9017e30dbd6f.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;点击确定，我们将得到如下图的场景。
&lt;img src="https://img.way2solo.com/photo/2021/e377e9a7-7a54-467f-a646-9a2bc88b4025.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;我们简单地刷一下地形纹理。
&lt;img src="https://img.way2solo.com/photo/2021/41ad3c38-ed06-46c5-ace4-8d30e02546ba.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;上方的岩石区用来作为怪物的入口，下方的草地区作为怪物进攻的目标。&lt;/p&gt;

&lt;p&gt;我们先实现最简单无脑的刷怪，每 2 秒刷出一只怪物，并命令它攻击到基地。
&lt;img src="https://img.way2solo.com/photo/2021/2160e872-b6f3-4906-a82d-78576977ddc1.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;在岩石区创建一个矩形区域。
&lt;img src="https://img.way2solo.com/photo/2021/cf3936e2-7ea5-450b-9226-0e2f4c37286d.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;如上图，简单地创建一个触发器并将逻辑编写好。
我们不需要立即把怪物的所属玩家设置为玩家 2、3 或者别的玩家，因为我们的目的并不是立即编写出一个可以直接发布并供游玩的系统。
在我们制作一个完整的可以供体验的地图之前，我们想要的只是先完成这个刷怪逻辑。
因此，选择一个能够便于让我们测试的写法，能够让我们更有效率地制作功能，并确定它是否能满足我们的需要。
创建完成一个单位后，我们要命令这个单位攻击到基地所在位置，即下方的草丛区。
&lt;img src="https://img.way2solo.com/photo/2021/0796c920-d591-47da-bc18-c31dc74fb677.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;再创建一个矩形区域 001。
然后如下，添加动作。
&lt;img src="https://img.way2solo.com/photo/2021/47b918e8-79f6-49e9-b83d-9dcd7f60c205.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;如此，保存并进入游戏测试，每 2 秒会出现一个步兵，并且这个步兵会被命令攻击到基地。
&lt;img src="https://img.way2solo.com/photo/2021/dbea2995-d6a1-429c-8c23-60f0f6041b3d.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;不过既然是刷怪，我们不能把怪物的所属玩家定义为我们自己。
但如果我们还没有办法确定接下来我们要把怪物的所属分配给哪个玩家，我们可以先使用一个变量来替代。
&lt;img src="https://img.way2solo.com/photo/2021/dc4bd63b-7d38-4cc8-8dff-798bdd19820b.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;我们创建一个类型为 monster_owner 的全局变量，并修改我们的动作转而使用 monster_owner 作为刷出的怪物的所属玩家。
&lt;img src="https://img.way2solo.com/photo/2021/49688dac-d760-4541-8c6a-77123a53fc08.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;但就像我们变量窗口所显示的，我们还没有设置 monster_owner 是哪个玩家。
我们可以再创建一个触发器，用来设置初始的数据。
&lt;img src="https://img.way2solo.com/photo/2021/822d50e1-019b-4bab-add0-b45af8a21f29.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;如果现在回到游戏，我们的怪物将会属于玩家 2。
不过在那之前，我们增加一个触发器，用来打开全图视野，否则我们将无法在游戏中看到刷出的单位，因为整个地图中现在都没有玩家 1 的单位，这会导致我们无法观察系统的运行状况。
&lt;img src="https://img.way2solo.com/photo/2021/3d861ae4-1368-40ba-9c69-ef2feb5b56dd.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;好了，保存，测试地图。
&lt;img src="https://img.way2solo.com/photo/2021/2fd0ef03-4f24-4bc2-8b0c-d62f1202fa78.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;结果如上图，符合我们想要的效果。&lt;/p&gt;

&lt;p&gt;不过如同我们所见到的，这个刷怪系统会每 2 秒必然刷出 1 只怪物，这意味着玩家一定会对抗源源不断的怪物，没有休息时间，并且怪物也不会随着时间增强。
如果只是作为一个小功能，那么我们已经完成它了。但如果是作为游戏的主要流程，还差点意思。&lt;/p&gt;

&lt;p&gt;我们先设定游戏每 3 分钟会出现一波怪物浪潮，总共会有 10 波怪，并且每波怪的数量是 30 个，每波的怪物类型也不一样。
根据上述设定，首先我们要修改刷怪触发器的触发间隔时间为 180 秒。
&lt;img src="https://img.way2solo.com/photo/2021/78a6470a-f80c-40b1-9058-3e90ff29b7e3.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;随后，由于每波的怪物类型不同，我们需要记录当前的波次。
创建一个整数变量 wave 来指代当前波次，并在每次游戏逝去 180 秒的时候 +1。
&lt;img src="https://img.way2solo.com/photo/2021/e90ab4f5-a107-45f6-9d00-8792f076b89f.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;然后修改怪物的数量为 30。
&lt;img src="https://img.way2solo.com/photo/2021/f24636a5-9c01-42e2-8ee9-e411f98b59ef.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;但是程序并不会自动帮我们选出每个波次刷什么怪物类型，因此我们需要自己设置它。
同时，这些怪物类型还必须和波次有关联。&lt;/p&gt;

&lt;p&gt;我们可以简单地通过条件分支来判断当前波次，如下图：
&lt;img src="https://img.way2solo.com/photo/2021/ff1519fc-1454-44d3-b064-57d88a6ce9da.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;我们也可以把每波要刷出的怪物类型保存在一个类型为 “单位类型” 的数组变量中，并在地图初始化或别的任何你想要的时候把这些数据赋值储存到变量中。
&lt;img src="https://img.way2solo.com/photo/2021/256803e3-0d8e-433a-b6f3-fbb3af7aabad.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;
&lt;img src="https://img.way2solo.com/photo/2021/8931b91a-0a6b-4a6f-b920-7b4a53490842.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;如果你观察仔细，你会发现 monster_type 这个变量类型的数组长度是 11，但实际上我们只设置了 1 到 10 的值。
原因是，monster_type[0] 也是一个数据。
你可以将 monster_type[0] 设置为步兵、monster_type[1] 设置为矮人火枪手，但其实无论从 0 开始从 1 开始，都可以让程序正常运行。
只不过为了便于理解，我使用 1 作为数组的起始值。
数组的长度设置不正确（往往是设置得太小），会导致在读取某个超出长度的变量时，打断触发器逻辑的运行。有时候这不会有什么影响，另一些时候这样的问题会导致系统逻辑严重错误并且导致游戏流程卡死。
但是排查这种问题往往不一定很简单，因为魔兽并不会准确地告诉你它崩溃或者运行错误是因为什么原因，甚至有时候它不会认为你使用一个没有经过赋值的变量是错误的。
关于这一点，后续我们还会再做讲解，但现在只先略作提醒。
回到正题，现在我们已经有了和波次关联的怪物类型数据。想要使用它，我们回到刷怪触发器，修改创建单位的类型，使用如下写法。
&lt;img src="https://img.way2solo.com/photo/2021/e30d0e48-7f1a-4cc9-a271-11fcd63e031e.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;这样我们便得到了一个能够基于当前波次来刷出不同类型怪物的刷怪系统。
不过这个系统还是有 BUG 的。
如果我们现在就进行测试，将会在刷出怪物后，只有 30 个怪物中的一个攻向基地。原因是 “最后创建的单位” 指向的是单独的一个单位，我们只能用 “最后创建的单位组” 才能捕获被创建的多个单位。
如果我们通过单位组发布命令，而非对单位发布命令，就能看到这样的函数。
&lt;img src="https://img.way2solo.com/photo/2021/31a911fc-8f9b-4db8-bf1c-228123ff5a5f.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;但是如同该动作所说的，这个动作最多只能对单位组中 12 个单位发布命令。我们的一共有 30 个单位。
因此我们只能选取单位组，挨个对其中的单位发布命令。
&lt;img src="https://img.way2solo.com/photo/2021/669ca780-11f5-461e-b52d-3e7b5f686545.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;如图所述进行修改，注意要将发布命令动作中的第一个参数从 “最后创建的单位” 修改为 “选取单位”。
现在我们的系统就完成了，保存地图后测试，会发现每 3 分钟就会刷出 30 个怪物并且攻向基地。
不过……
如果我们真的等待 3 分钟，这样的测试效率就太低了。
因此在那之前，让我们再额外增加一个事件，用来帮助我们进行逻辑测试。
&lt;img src="https://img.way2solo.com/photo/2021/148e2bb9-e365-4c03-a687-bb6617a71164.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;完整的逻辑如上图。
&lt;img src="https://img.way2solo.com/photo/2021/cd7e683d-edf9-464b-ae02-0ac864df41b1.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;运行效果如上。&lt;/p&gt;

&lt;p&gt;不过这还不算完成，如果我们现在就这么不管了，我们的怪物每刷一波，就会造成 31 个点泄漏（1 次怪物出生点，30 次发布命令）。
让我们修复这个问题。
&lt;img src="https://img.way2solo.com/photo/2021/06f80d4d-0eea-4983-ba1b-9f8b70d890e8.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;如上图，我们完整地完成了一个刷怪系统的核心逻辑。
不过对于最终的游戏，我们还需要在完成第 10 波后关闭刷怪系统，否则在 10 波完成后还会继续刷怪。
因此我们还需要增加一个判断。
&lt;img src="https://img.way2solo.com/photo/2021/16a52de0-2d15-47ca-b1b7-0c4625a3981f.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;显然这些逻辑仅仅完成了刷怪功能，如果我们想要让玩家知道距离下一波还有多久，为玩家提示下一波怪物的类型，我们就还需要更细化的逻辑。除此以外，当玩家在第 10 波后杀死所有怪物，我们希望游戏胜利，就还需要额外撰写胜利逻辑。
这些内容，让我们下期再完成。&lt;/p&gt;

&lt;p&gt;————————————
附：感谢魔兽争霸官方对战平台对本教程提供支持。
魔兽争霸官方对战平台是由网易研发运营，暴雪官方正式授权的官方对战平台。如果正在阅读本文的你对制作魔兽地图有想法、希望与平台探讨合作事宜，或正在寻求魔兽地图的商业变现，可通过官方平台提供的合作电子邮箱来沟通联系。
电子邮箱地址：warcraft3worldedit#service.netease.com（# 替换为 @）&lt;/p&gt;</description>
      <author>DreamerQW</author>
      <pubDate>Mon, 08 Mar 2021 18:31:07 +0800</pubDate>
      <link>https://beta.w2solo.com/topics/902</link>
      <guid>https://beta.w2solo.com/topics/902</guid>
    </item>
    <item>
      <title>《从零开始的 RPG 游戏制作教程》第十一期：排泄、运行效率</title>
      <description>&lt;p&gt;往期回顾&lt;/p&gt;
&lt;h3 id="目录"&gt;&lt;strong&gt;&lt;em&gt;目录&lt;/em&gt;&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://indiehackers.net/topics/673" rel="nofollow" target="_blank" title=""&gt;1. 前言&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://indiehackers.net/topics/675" rel="nofollow" target="_blank" title=""&gt;2. 第一期：制作基础场景&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://indiehackers.net/topics/689" rel="nofollow" target="_blank" title=""&gt;3.第二期：让勇者和怪物登场&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/727" title=""&gt;4.第三期：基础的数值设计&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/745" title=""&gt;5.第四期：从理论的角度简单聊聊关卡&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/767" title=""&gt;6.第五期：制作物品和技能&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/774" title=""&gt;7.第六期：设置怪物掉落物并部署关卡怪物&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/782" title=""&gt;8.第七期：触发器与逻辑&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/811" title=""&gt;9.第八期：对话、按钮、变量、马甲&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/830" title=""&gt;10.第九期：信息反馈（上）&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/839" title=""&gt;11.第十期：信息反馈（下）&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;第十一期：排泄、运行效率&lt;/p&gt;

&lt;p&gt;魔兽争霸官方对战平台一直在招募游戏开发团队，如果对开发 RPG 地图有兴趣的，可以直接跟他们联系，邮箱：warcraft3worldedit#service.netease.com（# 记得换成 @）
视频游戏的本质是应用程序，是软件，这是不可否认的。
魔兽地图是魔兽争霸 3 的衍生品，魔兽争霸 3 是应用程序，是软件。
也正因此，我们所制作的地图必然地会受到其作为应用程序的限制。
&lt;img src="https://img.way2solo.com/photo/2021/59d636cc-4733-4f9c-8aee-6abae14d48a5.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;魔兽争霸 3 会读取魔兽地图的数据，并执行地图内包含的脚本。
当游戏按照脚本演算后，所得到的就是我们的游戏世界。
&lt;img src="https://img.way2solo.com/photo/2021/d9147398-e651-4198-9ecf-e6f05b474705.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;（上图为通过 w3x2lni 工具将一个魔兽地图解包后，所呈现出的、一个魔兽地图中包含的数据文件）&lt;/p&gt;

&lt;p&gt;理论上，一张魔兽地图在游玩的时候，并不会带来非常庞大的效率问题，因为标准的、由暴雪提供的魔兽地图往往会在玩上一小段时间后保存、退出游戏，下次游玩的时候才会再载入地图。
这样就不至于一大堆数据堆积在内存里，使得游戏越来越卡顿。
不过，随着玩家社区对魔兽地图编辑器的挖掘，越来越多时长为 60 分钟、120 分钟，并且体积逐渐庞大（从开始的 2、3MB，到后来突破 8MB，到现在平台上随处可见的 100-200MB）的地图浮出水面。
&lt;img src="https://img.way2solo.com/photo/2021/2aaf0bac-7f49-420d-89ef-2fb721cfec67.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;同时在时长范围内，一些追求华丽效果或者丰富系统的制作者还会竭尽所能地往里面添加大量特效、动画、文本渲染、单位创建与删除等等逻辑。
而魔兽争霸 3 的内存回收机制，并不会判断一个【对象】是否长期没有被使用。而在魔兽地图编辑器的触发器中，又有许多函数能够【创建对象】。
在所有这些对象中，最典型的即是【点】对象。&lt;/p&gt;

&lt;p&gt;创建一个单位在区域中心，这时，【区域中心】会生成一个点，但这个点会一直在内存里保留。
指定单位移动到区域中心，这时也会生成一个点。
创建物品在单位所在位置，这时也会生成一个点。
……&lt;/p&gt;

&lt;p&gt;换言之，在所有涉及到【位置】的操作中，每次执行这么一次操作，魔兽争霸就会创建一个【点】在内存中。
点是一个包含了 X、Y 坐标的数据对象，它是一个可以被储存为变量的数据，并且只要这个点没有被删除，它就会一直待在内存里，等待被再次读取。
显而易见的，我们的地图制作者们大多一开始并不会意识到这个问题，因为魔兽地图编辑器中并没有说明书指出点堆积过多会导致什么问题。
&lt;img src="https://img.way2solo.com/photo/2021/484123bf-595e-430d-aed6-d0d232bcdf03.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;在触发器动作中找到【点】分组，可以看到这里有【移动点】和【清除点】。&lt;/p&gt;

&lt;p&gt;以创建一个单位为例，让我们看看应该如何防止点堆积在内存中。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2021/da5b1a09-7b19-4c1c-a071-cb975cf3cf08.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;在创建单位动作中，我们需要填写【指定点】参数。
点击这个参数，找到常用的【矩形区域中心】函数。
&lt;img src="https://img.way2solo.com/photo/2021/a55829e8-6e4c-42d9-af17-b0983e7e08d2.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;可以看到，在这条函数下方有一个注释：会创建点。
这个含义即是说明，如果使用了这条函数，魔兽争霸 3 游戏就会创建一个【点】对象在内存中，供接下来的脚本使用。
&lt;img src="https://img.way2solo.com/photo/2021/a905941d-7399-4143-a41f-b6fab099f904.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;如果像上图一样填写，就意味着每次执行这条动作的时候，我们的内存中也就 “永久” 地增加了一个【点】——直到游戏崩溃或者退出当前地图。
要避免这个问题，我们就需要获取每一个【被创建的点】，把它保存到某个变量中，并且在使用后删除它。
创建新动作，找到逆天局部变量。
 &lt;img src="https://img.way2solo.com/photo/2021/e94a7612-2a76-4e13-9542-c4539723de15.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;
&lt;img src="https://img.way2solo.com/photo/2021/fc5211a5-532a-4557-bdfa-80441e6d624b.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;设置类型参数为【点】，在这里我们使用 p 作为变量名。
&lt;img src="https://img.way2solo.com/photo/2021/b3411dd7-0b85-4aa3-888e-612ca21aedf0.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;然后我们要将创建单位动作中的点参数修改为逆天变量 p。
&lt;img src="https://img.way2solo.com/photo/2021/33672c47-6728-4b56-8287-17c9e869789d.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2021/4142d9a5-05f3-44c5-aaf3-5eb1b302b2ee.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;如图所示，便和先前的功能相同了。
然后在使用完了这个点后，我们要清除它。
&lt;img src="https://img.way2solo.com/photo/2021/b8281383-1587-41a0-8215-e55d3ad729d2.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;如此，我们便得到一个完整的没有点泄漏的创建单位动作。&lt;/p&gt;

&lt;p&gt;除了点泄漏以外，常见的泄漏还有单位组泄漏、计时器泄漏、特效泄漏。
它们的清理方式分别如下：&lt;/p&gt;

&lt;p&gt;单位组泄漏：
&lt;img src="https://img.way2solo.com/photo/2021/e769f0c4-264b-464d-a1f6-53ae96f57ad9.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;逆天计时器泄漏：
&lt;img src="https://img.way2solo.com/photo/2021/3b3ab75a-5ece-41fc-a616-bae4f44bd391.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;特效泄漏：
&lt;img src="https://img.way2solo.com/photo/2021/9bcf976a-feb4-4cfb-a2dd-749e426ee5db.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;其中单位组泄漏往往在群体类效果的逻辑中出现。
当使用选取区域内单位的时候，这些单位都会被获取并存放到一个新创建的单位组中，从而我们可以通过该单位组来索引所有符合我们需要的单位，并为这些单位执行一段特定的逻辑。
不过和点一样，单位组也是一种【对象】，会被创建到内存中。
只是点储存的数据是两个坐标，而单位组储存的数据是数量不固定的单位。
逆天计时器则是 YDWE 提供的一种拓展计时器，能够轻易地传递自定义数据。
（在 JASS2，即魔兽争霸 3 所使用的游戏脚本语言中，并没有【跨域局部变量】的概念，我们在后续会讲解魔兽争霸 3 的脚本语言的概念）
如果创建了一个逆天计时器，而我们不去手动清除它，那它也会作为一个对象被放置到内存中持续存在，从而占用我们的资源。
同理，特效也一样。&lt;/p&gt;

&lt;p&gt;如果我们翻阅由魔兽争霸 3 提供的基础脚本定义文件（common.j），我们会发现几乎绝大多数 jass 内的变量类型均由一个 handle 变量类型拓展而来。
只有 integer、real、string、boolean 这类基础类型的变量，并不是由 handle 拓展而来的。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2021/b15c7ae3-3a91-425c-84c1-43414af16724.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;而如果我们搜索 handle，则会出现这样的定义。
&lt;img src="https://img.way2solo.com/photo/2021/89420e44-82d1-4370-b0eb-b05503848aa9.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;不过本期并不打算就魔兽争霸 3 的脚本原理进行介绍，因此我们先暂时打住。
回到我们的正题，即所有继承自 handle 的对象，我们如果不再使用它了，都应当考虑【删除/清除】它。&lt;/p&gt;

&lt;p&gt;我们点击触发器的菜单 TESH，并打开 Function List，搜索英文：Remove，我们将会得到一大堆用于删除特定对象的函数。
&lt;img src="https://img.way2solo.com/photo/2021/41cf2dab-5751-4fb1-a77b-d9eb48593491.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;
&lt;img src="https://img.way2solo.com/photo/2021/8ec92207-e6b6-4bfe-accf-7ef970b7f3fd.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;而如果我们搜索英文：Destroy，也会出现许多摧毁特定对象的函数。
&lt;img src="https://img.way2solo.com/photo/2021/a53acc3a-2524-4827-8a3d-c84824ab3442.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;换言之，只要是继承自 handle 类型的对象，理论上都会有对应的清除函数。&lt;/p&gt;

&lt;p&gt;让我们用术语来小结本期所讲的内容，即是【内存管理】。
&lt;img src="https://img.way2solo.com/photo/2021/455cfbf9-4a34-4c36-928d-fc1cdbd8c595.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;关于内存管理的更详细介绍，在网络上有大量文章可以查找到。
由于技术的局限性，魔兽争霸 3 即便运行在高配置电脑上，当其内存泄露达到一定量级时，游戏本身仍然会变得极其卡顿。
而魔兽争霸的脚本又并未实现现代编程语言中常见的【垃圾回收】机制，这也正是我们不得不手动去管理游戏对象的清除的原因。&lt;/p&gt;

&lt;p&gt;不过，即便我们已经提了这么多关于数据泄露的问题，我们仍然要客观地看待这个事情。
对于技术工作者而言，注重编写的代码的质量、完整性、效率是非常重要的。
但对于游戏制作者而言，尤其是项目负责人而言，有时候必须根据项目的实际制作周期、能够投入的精力、资源，去取舍地选择某些问题是否要解决或不解决，即有时候我们必须在程序运行效率和项目制作效率之间做取舍。
因此本期提出了关于内存管理的概念，但具体在实践中如何把握这种【度】，仍然是需要制作者通过大量自身的实践经验来权衡的。&lt;/p&gt;

&lt;p&gt;在魔兽地图编辑器社区，人们往往把【排泄】作为关键词进行讨论。
关于【排泄】的详细介绍，在社区内有许多人已经撰写了更多更详细的实践教程，如果你感兴趣，可以自行搜索这些资料。
&lt;img src="https://img.way2solo.com/photo/2021/c32a37cc-1747-4794-961b-923f28eea874.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;另，内存管理的内容也并不局限于排泄，根据游戏的体量不同，一个游戏对于内存管理的要求程度也不同。
不过，内存管理属于更专业的技术研究话题，本教程仅作基本介绍，也在此打住了。&lt;/p&gt;</description>
      <author>DreamerQW</author>
      <pubDate>Mon, 08 Feb 2021 12:21:23 +0800</pubDate>
      <link>https://beta.w2solo.com/topics/851</link>
      <guid>https://beta.w2solo.com/topics/851</guid>
    </item>
    <item>
      <title>《从零开始的 RPG 游戏制作教程》第十期：信息反馈（下）</title>
      <description>&lt;p&gt;往期回顾&lt;/p&gt;
&lt;h3 id="目录"&gt;&lt;strong&gt;&lt;em&gt;目录&lt;/em&gt;&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://indiehackers.net/topics/673" rel="nofollow" target="_blank" title=""&gt;1. 前言&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://indiehackers.net/topics/675" rel="nofollow" target="_blank" title=""&gt;2. 第一期：制作基础场景&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://indiehackers.net/topics/689" rel="nofollow" target="_blank" title=""&gt;3.第二期：让勇者和怪物登场&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/727" title=""&gt;4.第三期：基础的数值设计&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/745" title=""&gt;5.第四期：从理论的角度简单聊聊关卡&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/767" title=""&gt;6.第五期：制作物品和技能&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/774" title=""&gt;7.第六期：设置怪物掉落物并部署关卡怪物&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/782" title=""&gt;8.第七期：触发器与逻辑&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/811" title=""&gt;9.第八期：对话、按钮、变量、马甲&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/830" title=""&gt;10.第九期：信息反馈（上）&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;接上期。
本期将进一步拓展【信息反馈】的概念。&lt;/p&gt;

&lt;p&gt;上期我们讲述了信息反馈的时机、方式对人注意力的影响，也讲述了如何通过信息反馈来从精神层面奖励玩家。
除了这些因素以外，信息反馈还可以增强游戏的吸引力。&lt;/p&gt;

&lt;p&gt;打击感案例：击退&lt;/p&gt;

&lt;p&gt;打击感在战斗类游戏中是很常见的反馈。
格斗游戏中，轻击敌人，只会让敌人出现略微的后退，但如果使用连招加上重击，则往往会将敌人击飞。
&lt;img src="https://img.way2solo.com/photo/2021/c02e11f7-7c1c-442c-9eeb-ee773a6b72e5.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;在知名动作类游戏《鬼泣》系列中，甚至能够使用无限的连击手段，将敌人抛到空中，再飞击得极远。
&lt;img src="https://img.way2solo.com/photo/2021/d9decc70-39af-4b19-8640-eb15742e1a51.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;在 RPG 中，一些基础的招式只会具备简单的特效，而复杂的、高级的招式则往往会有一连串炫酷复杂的表现效果设计，并且附带会持续较长时间的其它效果。
&lt;img src="https://img.way2solo.com/photo/2021/720b3cd0-25ef-49ee-a596-a7eecbccfdcc.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;让我们回到具体的例子。&lt;/p&gt;

&lt;p&gt;在魔兽争霸，打开单位编辑器，我们可以看到，在各个单位中，我们都可以设置他们攻击的声音。
&lt;img src="https://img.way2solo.com/photo/2021/6bc2b716-20f5-4bdb-94a9-8b8ec4c8ed34.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;
&lt;img src="https://img.way2solo.com/photo/2021/306c91e0-9099-4c8d-8e3f-593893f6436d.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;农民的武器声音是金属轻砍，步兵的武器声音是金属中切，圣骑士的武器声音是金属重击。
远程攻击的单位，如牧师、狮鹫骑士，他们攻击的声音则来自于投射物特效模型。
&lt;img src="https://img.way2solo.com/photo/2021/e0c8b96d-e018-4935-b332-12dc537c0f62.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;
&lt;img src="https://img.way2solo.com/photo/2021/223585d6-e62d-4daa-b811-a1cc7997fc5a.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;这些即是魔兽争霸游戏基础的打击感。&lt;/p&gt;

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

&lt;p&gt;让我们先创建一张新地图。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2021/ac8ad693-1db6-4b19-a814-c33630d8a982.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;在新的地图上，我们放上一个圣骑士和一个步兵，我们希望实现圣骑士击中步兵后，能够击退步兵的效果。
打开触发编辑器，捕获步兵受到伤害事件。
&lt;img src="https://img.way2solo.com/photo/2021/3e33fd73-fece-4adf-979e-5750d7e22df8.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

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

&lt;p&gt;我们直接使用 YDWE 提供的冲锋功能。
&lt;img src="https://img.way2solo.com/photo/2021/18f58ade-1f8e-4b9d-8481-183cf5f9ec79.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;
&lt;img src="https://img.way2solo.com/photo/2021/3a3e4945-e46c-4318-a71a-a7378286baed.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;这条动作的功能，抛开其命名【冲锋】，实际上就是【连续位移指定单位】。
根据我们的需要来填入参数即可。
第 1 个参数，我们要位移的单位是受到伤害（被击中）的步兵。
第 2 个参数，我们要位移的方向是伤害来源到受伤单位（触发单位）的角度。
这一条，我们也有 YDWE 提供的拓展函数解决问题。
&lt;img src="https://img.way2solo.com/photo/2021/6cbd9759-b79d-4d59-acbf-e80a7ba8ae39.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;第 3 个参数，射程，即位移距离，我们修改为 200，避免后退过多。
第 4 个参数，持续时间修改为 0.5 秒，以实现瞬间击退的感觉。
第 5 个参数，刷新周期，1/0.03，约为 33，本参数影响动画的流畅度，即帧率。通常情况没有特别需要时，我们可以保持为 0.03。如果地图上同时有很多冲锋逻辑发生，则需要考虑将刷新周期提高，从而降低帧率，以提高游戏运行效率避免卡顿。
后续参数则会影响单位和其它单位或地图上的装饰物的交互，根据需要修改。
最终 2 个特效，在本例中我们先不添加。
&lt;img src="https://img.way2solo.com/photo/2021/05c9f7b2-4743-4618-a434-188f467475bb.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;
&lt;img src="https://img.way2solo.com/photo/2021/243d5bc5-953a-462c-b7dd-169b316d5e6c.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;确定后进入游戏。
&lt;img src="https://img.way2solo.com/photo/2021/bc05fa7c-a024-456c-9bee-ff79bb6d92ef.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;攻击后：
&lt;img src="https://img.way2solo.com/photo/2021/736d109e-16ef-4d1a-a55d-270d27ebf680.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;为了让表现效果看起来更夸张，我们可以加上烟尘效果。
&lt;img src="https://img.way2solo.com/photo/2021/72cd8006-a4e2-4b55-8eac-006807ab5a81.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;
&lt;img src="https://img.way2solo.com/photo/2021/c6fdab71-1c18-4fa4-8c69-316d745979ec.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;保存后回到游戏。
&lt;img src="https://img.way2solo.com/photo/2021/ee8ccc55-e592-4dba-b49d-df599b4c9173.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;可以看到步兵现在被击中后会带有浓厚的烟尘效果。&lt;/p&gt;

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

&lt;p&gt;使用逆天局部变量和计算类函数来计算和获取伤害值。（逆天局部变量的概念在附录中介绍）
&lt;img src="https://img.way2solo.com/photo/2021/968fef32-3aed-4233-ae2d-458b6ada24dc.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;
&lt;img src="https://img.way2solo.com/photo/2021/58d0a3d8-3d57-4ed0-ba9d-836f365bdcc6.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;
&lt;img src="https://img.way2solo.com/photo/2021/e0afc907-c5a4-4d2b-b990-5c865e8088a9.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;得到如下的动作。
&lt;img src="https://img.way2solo.com/photo/2021/4160707e-94fa-40d6-895b-a8cf67d788f3.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;然后通过读取逆天局部变量，来获取我们刚才计算出的变量值。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2021/ccfc49d5-cddf-4723-a94b-7191af999e48.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;回到游戏后，可以测试出现在被击单位后退的距离会和受到的伤害相关。
&lt;img src="https://img.way2solo.com/photo/2021/4b69a808-7b8e-4907-92d1-28d22369c2ba.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;在实际测试中，0.5 仍然是非常慢的数字，并不符合打击后瞬间击退的感觉。
我们将数字修改为 0.3，以贴合我们的效果。
&lt;img src="https://img.way2solo.com/photo/2021/5c6b0e4e-e970-49bb-889e-655d344dbc32.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;回到游戏后测试，效果好多了。&lt;/p&gt;

&lt;p&gt;高级装备的信息反馈：击中特效&lt;/p&gt;

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

&lt;p&gt;这个效果仍然建立在【命中】时。
让我们直接编写效果。
&lt;img src="https://img.way2solo.com/photo/2021/58463745-6327-4667-afe6-979fda453ab2.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

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

&lt;p&gt;回到地形编辑器放置几个别的怪物。
&lt;img src="https://img.way2solo.com/photo/2021/fbee1ff2-2c66-4873-8a50-e865de4bef56.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;然后进入游戏测试。
&lt;img src="https://img.way2solo.com/photo/2021/ffd53a74-f9ad-431b-9c57-cb2baa1aab57.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

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

&lt;p&gt;信息反馈的小结&lt;/p&gt;

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

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

&lt;p&gt;概念：编辑器拓展 MOD
魔兽地图编辑器诞生自魔兽争霸 3 发布的时候。原本的魔兽地图编辑器虽然已经可以完成很多功能，但那时的魔兽地图编辑器的作用并不是用于彻底地制造丰富功能的独立的地图，而是基于魔兽争霸 3 现有内容进行适当拓充。
因而在数十年的发展中，一大群魔兽地图制作爱好者聚集到一起，建立了诸多社区，并且在这种发展中，一群人贡献自己的力量，基于原生的魔兽地图编辑器做了很多功能性的拓充。
在所有的拓充中，现存最知名、影响力也最广的便是 YDWE。
&lt;img src="https://img.way2solo.com/photo/2021/4cadc2e9-cc73-43a0-9b04-a663b41c24e7.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;这些拓展 MOD 对原生的魔兽地图编辑器做了诸多修改，增加了许多额外的用于辅助制图的插件（比如脚本代码编译器、文本染色器）。
本教程所使用的编辑器是基于 YDWE 进行二次拓充的、由魔兽争霸官方对战平台发布的地图编辑器。
我们要理解的是，我们现在正在使用的编辑器并不是暴雪原本提供的编辑器，而是经过社区修改的、添加了许多额外功能的编辑器。
因此，我们可能获得额外的便利，但也可能遭遇一些额外的麻烦。
附 YDWE 百度百科介绍：YDWE 是由 everguo、wataloo、aeris、actboy168、SiNg、Warft_TigerCN、Fetrix_sai 几人 (排名不分先后) 从 WOW8 编辑器中的 UI 所改进的一个功能强大的魔兽地图编辑器插件 (WE Mod)，他的功能能让一个不会 Jass 的新手完成使用 Jass 才能办到的事情。&lt;/p&gt;

&lt;p&gt;概念：局部变量、逆天局部变量、全局变量
局部变量，是指其作用域仅在特定【函数】内的变量，这在魔兽地图编辑器的脚本语言（JASS2）中被使用。
&lt;img src="https://img.way2solo.com/photo/2021/50295e07-f075-4d4b-9523-74d512b64a12.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;在上图中，local string msg，即是为 Hello 函数，定义了一个名为 msg、类型为 string（字符串）的局部变量。&lt;/p&gt;

&lt;p&gt;而逆天局部变量，则是作用域仅在特定【触发器】内的变量。
&lt;img src="https://img.way2solo.com/photo/2021/9ee7a542-387f-410d-a82c-75374524b94f.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;比如在雷霆之锤触发器中我们设置了逆天局部变量 p 为触发单位的位置，如果我们在别的触发器中读取逆天局部变量 p，我们并不会读取到任何值。
逆天局部变量是由 YDWE 为魔兽地图编辑器拓展的一种额外的、便于实现复杂系统的功能。&lt;/p&gt;

&lt;p&gt;与局部变量对应的便是【全局变量】，即我们在触发编辑器中通过变量编辑器添加的变量，这种变量的数值一旦被修改，就会在整个游戏过程中被修改，影响到所有其它使用了这个变量的逻辑。
全局变量通常是用于改变游戏进程的变量，比如到了多少关、游戏进入了什么阶段、刷怪的频率等等。
&lt;img src="https://img.way2solo.com/photo/2021/954b4f8d-a3cd-410c-adb9-9379aec8fb4e.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;关于变量的介绍我们未来还会详细说明，但现在先暂时概述。&lt;/p&gt;</description>
      <author>DreamerQW</author>
      <pubDate>Sun, 31 Jan 2021 13:43:24 +0800</pubDate>
      <link>https://beta.w2solo.com/topics/839</link>
      <guid>https://beta.w2solo.com/topics/839</guid>
    </item>
    <item>
      <title>《从零开始的 RPG 游戏制作教程》第九期：信息反馈（上）</title>
      <description>&lt;p&gt;往期回顾&lt;/p&gt;
&lt;h3 id="目录"&gt;&lt;strong&gt;&lt;em&gt;目录&lt;/em&gt;&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://indiehackers.net/topics/673" rel="nofollow" target="_blank" title=""&gt;1. 前言&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://indiehackers.net/topics/675" rel="nofollow" target="_blank" title=""&gt;2. 第一期：制作基础场景&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://indiehackers.net/topics/689" rel="nofollow" target="_blank" title=""&gt;3.第二期：让勇者和怪物登场&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/727" title=""&gt;4.第三期：基础的数值设计&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/745" title=""&gt;5.第四期：从理论的角度简单聊聊关卡&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/767" title=""&gt;6.第五期：制作物品和技能&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/774" title=""&gt;7.第六期：设置怪物掉落物并部署关卡怪物&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/782" title=""&gt;8.第七期：触发器与逻辑&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/811" title=""&gt;9.第八期：对话、按钮、变量、马甲&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;第九期：信息反馈（上）&lt;/p&gt;

&lt;p&gt;在玩游戏的时候，我们总是需要很多信息来给玩家反馈。
接下来我们讲讲信息反馈。&lt;/p&gt;

&lt;p&gt;在进入正题之前，我们要建立一个认知：即人的注意力是有限的。&lt;/p&gt;

&lt;p&gt;人的注意力是有限的，并且有优先级。这是因为人的大脑会下意识地去索取它感兴趣的信息。
简单地说，如果一个人在特定时候不想工作，这时候他会无意识地去注意手头工作以外的事情。或者如果有人在做着机械式地重复的工作，此时他的注意力可能并不在手头机械式的工作上，熟练度使得他无需把太多注意力投入到手头的流程中，比如机械式的收集、整理文件并归类。
这时候，他往往能够在工作的同时，将注意力放到旁边的影视节目上，或者是周围人的讨论内容上。
或者说，如果他已经疲劳了，有可能他会忽略其他人的谈话或要求，他人在招呼他的时候，得招呼好几次才会吸引到他的注意。&lt;/p&gt;

&lt;p&gt;对某件事的疲劳、对某件事的强烈兴趣、对某个特定部分的喜好和厌恶、对特定目的的追求，这些要素都能够影响人对特定信息的关注度，也会使得他们可能会接收不到一些信息。
因此在游戏设计中，我们不应当假设我们通过游戏发布的信息玩家一定会看到，而应当首先假设玩家注意不到我们的信息。&lt;/p&gt;

&lt;p&gt;基于这个假设，我们就要考虑如何给玩家推送信息，才能让玩家有效地注意到我们希望他的信息。&lt;/p&gt;

&lt;p&gt;此外，我们应当理解，如果我们的信息不能为玩家解决问题，那这个信息就是打扰。游戏可以为玩家推送信息，但是如果一个游戏推送给玩家的信息并不是玩家需要的，甚至是冗长臃肿而枯燥又没有实质性的帮助的，那这种信息就是垃圾信息。当垃圾信息过多的时候，玩家就不会再投放过多的关注度给通过相关的渠道推送的任何信息。&lt;/p&gt;

&lt;p&gt;典型地，我们可以从魔兽争霸 3 的战役中进行分析。
&lt;img src="https://img.way2solo.com/photo/2021/87274881-b28e-4b06-9bb5-6eebe586f9af.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;在魔兽争霸 3 的战役中，我们注意到，在载入界面往往会有该章节故事的概述和引子。
而当我们进入游戏后，往往游戏又会先从一段过场动画开始。
&lt;img src="https://img.way2solo.com/photo/2021/14285494-222d-427d-bff3-bcd93c61c996.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;
&lt;img src="https://img.way2solo.com/photo/2021/bc366353-4ccc-4178-9d1f-9fc2a1c892f7.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;当我们看完过场动画后，往往游戏又会给我们展示任务信息，并且伴随菜单处任务按钮的闪动。
&lt;img src="https://img.way2solo.com/photo/2021/a768e4cd-3e88-44ce-aceb-acd0b4ab7c23.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;在整个过程中，信息的呈现是徐徐道来的，给玩家留了足够的时间进行阅读，并且不要求玩家瞬间判断、尽快选择。甚至如果我们有时错过了一些信息，也可以通过消息记录功能回溯查看。
&lt;img src="https://img.way2solo.com/photo/2021/e66ea5fa-46ab-4c83-b17a-19ca88ea7593.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;在战役中，一方面我们是在玩游戏，另一方面我们是在体验游戏所呈现的故事。正因此，当我们从玩家转换到制作者时，就需要考虑到当我们要对玩家推送信息时，我们要呈现什么、怎么呈现，我们需要做取舍。&lt;/p&gt;

&lt;p&gt;让我们看看另一个例子。
&lt;img src="https://img.way2solo.com/photo/2021/e75b47b0-8fcf-451e-b31b-9f844d31572b.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;在《魔兽世界》中，如果一个 NPC 头上出现了黄颜色的感叹号，即是说明这个 NPC 身上有任务。我们通常在进入《魔兽世界》的世界、看完开场动画后，面对的第一个 NPC 就有这样的感叹号。因而在后来我们就会形成一个认识，即【黄颜色感叹号等于适合自己等级的新任务】。
随后当我们想要升级时，我们只需要简单地跟随黄颜色感叹号的指引就行了。&lt;/p&gt;

&lt;p&gt;这种新手引导 + 多次重复来塑造固有认知的方法，将感叹号变成了【快速升级】的【符号】。
在我们接受了这种符号的概念后，每次我们看到这种符号，就能不假思索地朝它前进，因为我们能立即联想到好的装备、钱币，以及经验值。&lt;/p&gt;

&lt;p&gt;然后，让我们再来看看激烈对抗环境下的例子。
典型的，在《英雄联盟》中，玩家在对抗中会将注意力放到当前与自己对线的敌人的走位、周遭环境的状态、小地图上其它英雄的动态上。在这种战斗中，玩家的注意力高度集中。
此时，当任意一个英雄被击杀时，如果我们只在聊天信息窗中显示出一行普通大小的红字，往往我们在游玩过程中是会忽略掉的，因为我们几乎不会在高度紧张的对抗中把过多的注意力放在聊天信息窗中。
&lt;img src="https://img.way2solo.com/photo/2021/817b500c-a41b-46dc-98da-25b291f8c775.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;在《英雄联盟》中，这类击杀信息会显眼地显示在窗口的顶部，并且连带语音播报。如果有英雄完成了五杀，这种信息就会更耀眼。同样，如果小龙、大龙被击杀、防御塔被摧毁，也会被通报。
&lt;img src="https://img.way2solo.com/photo/2021/fce832d5-8cac-46bf-9c12-0b9d6dce9b13.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;
&lt;img src="https://img.way2solo.com/photo/2021/650e2d64-c69f-4556-a283-caa52fdc25c5.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;因为这些信息，是对抗中的关键信息，能够影响战略决策。
对于竞技游戏高手来说，在没有游戏信息提示的情况下，他们也能大致推测出敌人在哪里。但对于休闲玩家，他们不一定会在平时对抗的时候关注队友的状态，因此当队友被击杀的时候，显眼的通报信息和随之而来的语音播报，就显得尤为重要，能够紧紧抓住他们的注意力，使得他们意识到危险来了。&lt;/p&gt;

&lt;p&gt;不过，实际情况是这种信息往往对于密切关注战斗状态的玩家没什么作用，这类通报信息的作用更多地是带来心理上的满足感。
一个玩家达成五杀，可能会内心觉得暗爽。但如果被通报给所有人，这种内心的爽快感就会被扩大。这种信息实质上被作为了一种【奖励】，赋予给达成了小概率事件的玩家，同时让所有玩家都渴望达成这种事件。这是一种通过机制赋予的【荣耀】。&lt;/p&gt;

&lt;p&gt;再一个例子，在魔兽争霸地图中有一张叫《战三国》的地图。
当游戏从准备阶段转换到战斗阶段的时候，游戏的顶部会出现【战斗回合】的红色大字，用于提示玩家游戏阶段的转换。
&lt;img src="https://img.way2solo.com/photo/2021/f00fdab6-fdd8-483a-bf61-9e6d9852f9bf.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;这种大而刺眼的信息，也能够抓住人的眼球，使我们能够瞬间意识到阶段变化了，某些操作将不再可用，需要等待下一个准备阶段。&lt;/p&gt;

&lt;p&gt;信息反馈能够让玩家切切实实的感觉到游戏在进行、发展中。
符合时宜、贴合玩家心理需要的反馈，也能够切切实实地让我们的注意力更多地投放到游戏的过程中，进而沉浸在游戏中。&lt;/p&gt;

&lt;p&gt;看过了诸多案例，让我们上手实践。
&lt;img src="https://img.way2solo.com/photo/2021/bfad0752-b31b-49e2-805b-6f2e491ea111.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;在魔兽争霸中，当我们的单位数量发展到一定程度时，我们的食物使用量会上升。当食物使用量抵达一定阈值时，就会产生【维修费用】，这会影响我们的资源获取率。
不过对于 RPG 地图来说，我们通常不会通过 “采集” 来获取资源。我们可以通过修改魔兽地图编辑器提供的高级参数来修改上方的提示文字，来实现【公告】的效果。&lt;/p&gt;

&lt;p&gt;通过地形编辑器菜单的【高级】-【游戏平衡性常数】，修改不同级别的维修费用的百分比数值。
&lt;img src="https://img.way2solo.com/photo/2021/b46e580e-a994-4660-b134-cab9c3b01148.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;确保勾选了【使用自定义平衡性常数】。
&lt;img src="https://img.way2solo.com/photo/2021/6b4d5840-13ee-48bb-9b3d-66a6212622e9.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;然后找到维修费用的数值选项。
&lt;img src="https://img.way2solo.com/photo/2021/78270e49-0e7a-4576-b319-2aef0287c1a3.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;适当进行修改。
&lt;img src="https://img.way2solo.com/photo/2021/1eb163f4-6482-4d81-baed-1df1bc5a6472.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;如此设置后，我们可以设置玩家的占用人口为 5、15、25、35、……、95、105，来对应地激活 1、2、3、4、……档位的食物提示信息。
要修改 1、2、3、……对应的提示信息，要在【高级 - 游戏界面】中进行。
&lt;img src="https://img.way2solo.com/photo/2021/1efc22e4-1652-4a69-ac43-512beba5988c.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;
&lt;img src="https://img.way2solo.com/photo/2021/53d46d9f-59c8-409b-a33e-6ea9c983ccec.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;确保勾选本窗口左上角的【使用自定义游戏界面】，然后找到【无维修费用】、【低维修费用】、【高维修费用】、【高维修费 2】、……
修改这些文本，按照我们的需要来创建我们自己的文本。
&lt;img src="https://img.way2solo.com/photo/2021/841b366e-e260-496e-b7c3-7a5ea00d821e.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;为了测试这些维修费用，让我们撰写一个输入指令来修改玩家使用的食物的功能。
&lt;img src="https://img.way2solo.com/photo/2021/97eb7abc-6293-41d4-9c38-9fee1e7c6f33.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;如图所示，我们便可使用如【food 123】的指令来修改玩家 1 的已使用人口数。
&lt;img src="https://img.way2solo.com/photo/2021/96246415-38ed-45cb-8704-385daa19e41c.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;输入 food 15，得到【小心敌人！】信息。
&lt;img src="https://img.way2solo.com/photo/2021/957f8703-1237-4b5d-bc79-05e17777df90.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;输入 food 5，得到【欢迎来到洛森村庄】信息。
&lt;img src="https://img.way2solo.com/photo/2021/12598ef7-e91a-4945-9f40-ec1536fd3d88.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;输入 food 25，得到【前方有危险！！！】。
&lt;img src="https://img.way2solo.com/photo/2021/474b0e22-1280-4a90-800a-14db3561b301.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;输入 food 35，如图。
&lt;img src="https://img.way2solo.com/photo/2021/ab4a8af1-e02d-457d-b3e5-392c712f6450.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;food 45，如图。&lt;/p&gt;

&lt;p&gt;如此，我们的信息测试正确。
通过这种方式，我们将魔兽争霸 3 的维修费用提示系统，修改为了一种通用的信息提示系统。
不过受限于魔兽争霸 3 的限制，我们能够通过修改维修费用文本来展示的信息不多。
因而在信息密集的环境，我们往往还会使用【信息刷屏】等方式来进行提示。
如下。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2021/9d83508e-e477-45da-91d8-9935a8e9b8f0.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;在【游戏】分类，找到【对玩家组显示文本消息】后，输入我们需要的消息。
然后粗暴地重复复制。
&lt;img src="https://img.way2solo.com/photo/2021/21eec1af-be1e-4536-9654-f173c02c5367.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;回到游戏输入 warn，我们便能看到刷屏信息的显著吸引效果。
&lt;img src="https://img.way2solo.com/photo/2021/34de8edf-b7a1-4819-82ac-6c59bff45765.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;对于现代的游戏来说，这种提示方式并不是什么 “优雅” 的方式。
由于我们制作的是基于【魔兽争霸 3】的【游戏 MOD】，而不是能够操控源代码、自由地添加我们需要的图片的【游戏】，那就不可否认，这能【达成目的】。
即【抓住玩家的注意力，使得他注意到我们希望他一定要知道的关键信息】，这一根本目的。&lt;/p&gt;

&lt;p&gt;在本期，我们所举的例子多是文本信息反馈，不过在游戏制作中，我们还会涉及到更多复杂的信息反馈。有些信息的性质是用于讲述的、有些则是奖励性质、还有些是惩罚性质、还有些是提示性质。同样，除了文本信息反馈，游戏里还有物理效果反馈、视觉效果反馈、音频效果反馈等等。
下期，我们会剖析更多的信息反馈类型，讲述它们的作用，以及如何用魔兽地图编辑器来实现它们。&lt;/p&gt;</description>
      <author>DreamerQW</author>
      <pubDate>Mon, 25 Jan 2021 10:28:50 +0800</pubDate>
      <link>https://beta.w2solo.com/topics/830</link>
      <guid>https://beta.w2solo.com/topics/830</guid>
    </item>
    <item>
      <title>《从零开始的 RPG 游戏制作教程》第八期：对话、按钮、变量、马甲</title>
      <description>&lt;p&gt;往期回顾&lt;/p&gt;
&lt;h3 id="目录"&gt;&lt;strong&gt;&lt;em&gt;目录&lt;/em&gt;&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://indiehackers.net/topics/673" rel="nofollow" target="_blank" title=""&gt;1. 前言&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://indiehackers.net/topics/675" rel="nofollow" target="_blank" title=""&gt;2. 第一期：制作基础场景&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://indiehackers.net/topics/689" rel="nofollow" target="_blank" title=""&gt;3.第二期：让勇者和怪物登场&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/727" title=""&gt;4.第三期：基础的数值设计&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/745" title=""&gt;5.第四期：从理论的角度简单聊聊关卡&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/767" title=""&gt;6.第五期：制作物品和技能&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/774" title=""&gt;7.第六期：设置怪物掉落物并部署关卡怪物&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/782" title=""&gt;8.第七期：触发器与逻辑&lt;/a&gt;
第八期：对话、按钮、变量、马甲&lt;/p&gt;

&lt;p&gt;好久不见。&lt;/p&gt;

&lt;p&gt;在 RPG 中，我们通常需要与 NPC 互动。
NPC 往往是游戏世界的原住民，当玩家与 NPC 互动时，我们便能够借由 NPC 之口，向玩家展示我们的游戏世界设定。&lt;/p&gt;

&lt;p&gt;在第七期中我们讲述过触发器与逻辑，在本期（乃至后续的更多期）中，我们将更频繁地使用它。&lt;/p&gt;

&lt;p&gt;不过在那之前，我们先创建 NPC。&lt;/p&gt;

&lt;p&gt;实现 NPC 对话，变量与数据类型，按钮与马甲&lt;/p&gt;

&lt;p&gt;我在地图上放置了一个新单位。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2021/b9be5184-b507-4d97-a66d-59fdb9618cab.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;在地图编辑器中，按下 I 键可以打开、关闭如出生点这类信息提示标记。
或者通过地形编辑器的菜单 - 察看 - 信息显示，来开关。
&lt;img src="https://img.way2solo.com/photo/2021/38261da0-f168-4c3a-823e-106954ccb8dd.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;然后我们可以更方便地放置我们的单位。
&lt;img src="https://img.way2solo.com/photo/2021/82eb1cbd-6870-4cf5-bfad-06244fb24697.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;这里我新放置的女巫，是通过物体编辑器创建的新单位【安洁拉】。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2021/7cbfe1d3-6b6f-4a2e-83a9-6f2a9a045f9a.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;她在本教程中被设定为克里夫的妻子。当玩家操作克里夫与安洁拉互动时，我们可以藉由安洁拉之口来讲述一些背景设定。&lt;/p&gt;

&lt;p&gt;打开触发编辑器，增加一个触发器【E04 克里夫靠近安洁拉】。
在事件列表中存在一个事件是【单位 – 进入指定单位的范围】，它使得触发器能够捕获一个单位进入另一个单位附近的事件。
&lt;img src="https://img.way2solo.com/photo/2021/a6f27f84-1a42-4374-a190-8b4a68370847.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;在这里，128 对应的是地形编辑器一个白色网格的大小。
&lt;img src="https://img.way2solo.com/photo/2021/2a9966d1-46f3-4e50-aa80-eb1974c0e90c.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;当你的鼠标在地形编辑器上滑动时，编辑器窗口左下角会标注你的鼠标当前所指的坐标点。
&lt;img src="https://img.way2solo.com/photo/2021/866cf3d4-13dd-4dd0-9f41-cf50cc944219.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;基于这个信息，我们就能判断游戏世界的尺寸并在需要时填写正确相关的参数。&lt;/p&gt;

&lt;p&gt;当克里夫靠近时，我们添加一个【电影】分类的动作【播送单位消息 (指定单位)】，让安洁拉对克里夫说话。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2021/94126f02-e6fb-4a52-b55f-b2449316b6bc.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;随后保存进入游戏，命令克里夫靠近安洁拉，就会产生最基础的对话互动。
&lt;img src="https://img.way2solo.com/photo/2021/af23e2d2-0594-4aa5-84f2-d0a8951e3696.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;进入游戏后我们发现一个问题，即安洁拉不断在说话。
这显然是不符合预期的。&lt;/p&gt;

&lt;p&gt;这即是逻辑开发中我们常说的 BUG。
在本逻辑中，出现这个 BUG 的原因是因为我们没有筛选接近安洁拉的单位，使得周围的小动物靠近安洁拉时，安洁拉也会说话。
让我们修复这个 BUG。
&lt;img src="https://img.way2solo.com/photo/2021/4c9e9cda-d354-4fbb-a923-8b87cdc8c5e5.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;
&lt;img src="https://img.way2solo.com/photo/2021/45cbb7ba-2ed1-4819-acb3-c792f7aed904.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;在我们添加了条件限制靠近安洁拉的单位类型是克里夫后，进入游戏，一切正常。
不过如果我们的游戏是多人游戏，则还需要对这触发器进行调整。
&lt;img src="https://img.way2solo.com/photo/2021/9d2a58c5-d0b0-4e4d-9424-1efd5333a888.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;我们对动作做了微调。&lt;/p&gt;

&lt;p&gt;【电影 - 播送单位消息 (指定单位)】的第一个参数是玩家组，默认会对所有玩家播放信息。但如果我们不希望在多人游戏时，每一位克里夫靠近安洁拉身边时，都对所有玩家发送一遍信息，我们就必须精确地限制我们应该给谁发送消息。
我们通过【单位所有者】函数，可以获得进入的克里夫所属是哪个玩家。
&lt;img src="https://img.way2solo.com/photo/2021/d17fc5c5-0afd-41a0-8058-a0d05f5fa96e.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;然后将其转换为单位组填入播送单位信息动作，作为该动作的第一个参数，便可达成我们想要的效果。
&lt;img src="https://img.way2solo.com/photo/2021/764a65b1-dfea-4158-8831-a382e63df57b.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;另外，通过触发器动作的注释可知，当一个对话信息在【没有声音】状态时，其默认持续时间为 5 秒。
&lt;img src="https://img.way2solo.com/photo/2021/817b7477-0d66-4567-8116-2fa758751e10.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;我们可以通过修改该动作的参数，来让文本消息持续时间变得更长。
&lt;img src="https://img.way2solo.com/photo/2021/9f48e4d3-79df-4b42-8d6d-c864ff56e4c1.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;默认持续时间 5 秒，并添加 3 秒，即这样修改后，这对话的文本信息便可持续 8 秒。&lt;/p&gt;

&lt;p&gt;同时，如果我们希望安洁拉不是只说一句话，那就可以在其后再增加消息。
&lt;img src="https://img.way2solo.com/photo/2021/1e714700-1f38-4088-b830-7a5af157bcf8.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;进入游戏后，我们能够在第一条消息 8 秒后，见到安洁拉说第二条消息：“祝你好运。”
&lt;img src="https://img.way2solo.com/photo/2021/17e008cd-9c2f-4263-a0c9-de8cb80153dd.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;不过目前的逻辑，如果我们来回不断在安洁拉附近徘徊，她就会不断说话。
&lt;img src="https://img.way2solo.com/photo/2021/68b9a9a8-6a1b-4320-9aa9-cf0bd24d4fcc.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;显然，如果让这场景在正式发布的游戏中出现，画风就会要么变得很诡异要么搞笑，甚至对于一些更严谨的玩家来说就会显得冒犯。
除非这样的场景是故意设计的，否则我们就应该去修复它，避免其出现这种诡异的情况。&lt;/p&gt;

&lt;p&gt;让我们回到触发器，继续优化我们的逻辑。
这次，我们要使用到【变量】。
找到菜单的变量按钮。
&lt;img src="https://img.way2solo.com/photo/2021/3d72e63b-4b57-4f89-a6f9-b0fdd640e5ec.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;点击它，打开变量窗口，添加一个变量。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2021/dcee8139-af3e-472d-99f1-88df125a0583.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;
&lt;img src="https://img.way2solo.com/photo/2021/2d1784da-7155-45df-b84e-6287f653d7fe.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;在弹出的变量窗口，点击上方的绿色按钮以新建变量。
新的变量在这里我取名为【E04_Talk】，设置类型为【布尔值】，用于记录玩家是否已和安洁拉互动。
接下来为了教学目的，我们先抛开多人游戏的情况，聚焦我们当前的知识。&lt;/p&gt;

&lt;p&gt;返回到 E04 触发器，添加一个条件，这次我们使用【布尔表达式】。
&lt;img src="https://img.way2solo.com/photo/2021/6e703f3f-84d6-4c44-8d20-8c99be84da77.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;将首个参数修改为我们的变量 E04_Talk。
&lt;img src="https://img.way2solo.com/photo/2021/92d760fb-0478-4ec0-97d4-ac1a60f94509.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;第二个参数修改为不等于。
&lt;img src="https://img.way2solo.com/photo/2021/94f3530e-1d75-4600-9c3b-8716d1d90d77.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;在变量窗口中我们可以看到 E04_Talk 的默认值为 FALSE。
&lt;img src="https://img.way2solo.com/photo/2021/941511f0-ceef-43c9-89e8-f880baeed13d.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;布尔值有两个值，一个是 TRUE（真），一个是 FALSE（假）。
【布尔值】这个【变量类型】的名字来源是 Boolean，音译为布尔值。
而实际上我们可以把它理解为【开关】，这是一种【数据类型】，只有【开】和【关】两个值。
而诸如【整数】、【实数】等其他【数据类型】，也分别有各自定义。
整数顾名思义，-1、0、1、2、3、100、50000、121531，都是整数。
实数也一样，-1.012、0.1361、13561.21，都是实数。
各数据类型的具体特性我们随后再讲解，总之现在我们先记得【布尔值】可以为 TRUE 或为 FALSE 就行了。&lt;/p&gt;

&lt;p&gt;在我们的触发器中，我们添加的第二个条件【布尔表达式】中，我们定义了，当 E04_Talk 不等于 TRUE 时，这个触发器才能运行。
因此如果 E04_Talk 等于 TRUE 时，这个触发器就不能运行。&lt;/p&gt;

&lt;p&gt;因此，我们可以在触发器的动作中修改 E04_Talk 的值，使其不再等于默认值 FALSE，而是我们赋予的 TRUE。
&lt;img src="https://img.way2solo.com/photo/2021/5be8e48d-685e-45ae-a644-7b82327893de.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2021/57351371-2eec-4643-ab12-e0b871d4e69c.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2021/b7d087db-3b5d-4c7e-8059-9cb4ab21885a.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;如此，E04 触发现在开始只要运行过一次后，就不会再次运行了。
&lt;img src="https://img.way2solo.com/photo/2021/b3667620-6f6e-4893-bbfb-8e94d4ebaca8.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;测试游戏，运转正常。&lt;/p&gt;

&lt;p&gt;按照同样的方法，我们还可以创建很多 NPC，并且创建很多对话。
为了让玩家便于理解，我们也可以设置可互动的 NPC 所属玩家为玩家 2（蓝色）以外的玩家。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2021/51306fe4-bc5c-47b0-9dcc-2732c8f9cd11.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2021/7c2a5d15-dd1f-4c22-aa91-ce5009e2e971.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2021/9b803670-4818-46ed-8571-ca37eb4bdffe.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;我额外添加了一些 NPC，并设置他们所属为玩家 4，并为他们设置对话。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2021/4a31acf2-65d6-4ae9-9b4a-f1ab10a106ab.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2021/693362fd-db0f-4158-a1f1-d55bd7b25df3.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;
&lt;img src="https://img.way2solo.com/photo/2021/14a49bbc-c0e4-47f3-a6c4-e1d2e4eea03c.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;
&lt;img src="https://img.way2solo.com/photo/2021/1e5762f3-ac2d-4359-91b3-9c6a4f8d12d5.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2021/8f0c531c-f126-46da-9514-ab853ec69573.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;
&lt;img src="https://img.way2solo.com/photo/2021/8335cde9-f43b-4ebc-9e1e-d3a845be2308.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;如此，我们的游戏世界就变得生动起来了。尽管我们的角色仍然是逻辑组成的数据，但他们现在的的确确可以与我们的玩家互动！
经过仔细设计，我们甚至能让他们饱含情感、根据玩家所控制的主角的状态，说出不同的话、并可能地对主角进行治疗。
&lt;img src="https://img.way2solo.com/photo/2021/99d2b2f9-4f87-4ec2-9eb5-e81bc2e3ad27.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;
&lt;img src="https://img.way2solo.com/photo/2021/d24ff03a-afc3-48cb-99b2-e06e48be2f5a.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;除了这种靠近之后产生对话的方式，我们也可以制作按钮式的对话。
即当玩家点击 NPC 的对话按钮的时候，NPC 才会与玩家对话。&lt;/p&gt;

&lt;p&gt;在魔兽争霸 3 中，如果有一个单位属于盟友而不属于自己，我们与之互动的方式往往是购买其出售的物品或者购买其出售的单位。
魔兽争霸 3 并没有为我们提供【单位按钮】这种功能，但我们的游戏需要单位按钮。
因此我们就得使用魔兽争霸 3 提供的基本组件，即单位、物品、技能、触发等等，来组合出我们需要的逻辑效果。&lt;/p&gt;

&lt;p&gt;我们需要捕获到玩家点击【按钮】这一事件，并且需要在中立或盟友单位身上呈现。
我们的第一个任务是找到哪些物件放在中立单位身上，也能够被玩家使用。
典型的一个例子是【地精商店】。
&lt;img src="https://img.way2solo.com/photo/2021/4e973b35-36b9-46b0-9257-084b5b853bff.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2021/240a2fec-dbc7-4025-95b8-b684191ccf55.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;进入游戏，我们靠近地精商店，选中它，右下角便会出现该商店会出售的物品列表。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2021/73489897-a261-4d47-91ea-64c4e3716d95.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;
&lt;img src="https://img.way2solo.com/photo/2021/bbd0c4aa-0753-4000-bf54-7f451c16e361.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;当我们购买这里的任意物品时，便会触发一个事件：单位出售物品。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2021/181a2ce4-4515-4333-b73e-83489ed2eeb5.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2021/685ac461-c5b1-4bda-8f9c-3ef40a804463.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2021/db85d4c3-e3d0-422a-be08-126404f3bd98.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;我们不希望在出售物品的时候触发对话，我们希望的是点击【对话】按钮的时候对话。想要实现这个效果，我们可以创建一个售价为 0 的物品，并添加给地精商店。
&lt;img src="https://img.way2solo.com/photo/2021/4f4d2ae5-b531-4067-abb3-cb5b117fd043.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;在物品页面，我们随意复制一个物品（本例中选用了【水晶球】），改名为【对话】并修改其售价。
&lt;img src="https://img.way2solo.com/photo/2021/9b32c857-bf1b-4993-9779-ae853a516083.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;然后我们回到单位页面，找到【地精商店】，修改【科技树 - 售出物品】，删除其它物品并添加【对话】物品。
&lt;img src="https://img.way2solo.com/photo/2021/6bf5e207-3270-422f-bcf3-39b7221c47fa.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;修改新建的 E08 触发中的对话内容后，我们回到游戏内。
&lt;img src="https://img.way2solo.com/photo/2021/182d4945-8851-4b52-85e4-ee29c6a7766c.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;现在地精商店会出售【对话】物品。
&lt;img src="https://img.way2solo.com/photo/2021/5cdfeac5-ed9f-41d7-b13a-74f9c798d132.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;不过在点击了这个按钮后，我们会发现我们的物品栏中多出了一个【对话】物品。
再次修改 E08，添加如下动作。
&lt;img src="https://img.way2solo.com/photo/2021/f6221d1c-871c-4a2e-99cc-1d900af33292.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;
&lt;img src="https://img.way2solo.com/photo/2021/a900596a-b835-46cc-97ef-c8d5479ccdd9.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;我们便通过【出售物品】来间接实现了【按钮】效果。
&lt;img src="https://img.way2solo.com/photo/2021/afa0d5ab-86ab-44f0-8e68-b7bc17ef6d92.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;尽管我们现在点击对话按钮后不会再获得【对话】物品了，但我们注意到点击一次后，会有一个【没有库存了】提示出现在该按钮上。
解决这个问题的方法是在物编中修改物品的贩售间隔时间。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2021/7c93272e-9aa8-4c11-a126-e4326b234bb9.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;
&lt;img src="https://img.way2solo.com/photo/2021/c8609549-f8bc-4410-bc9e-16c2cd3f87c2.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;至此，一个基于【出售物品】实现的点击按钮对话逻辑我们便完成了。&lt;/p&gt;

&lt;p&gt;如果我们觉得只能出现一种对话很没意思，我们还可以修改点击对话后的逻辑，随机地给出不同的对话内容。
我们创建一个整数变量 i。
&lt;img src="https://img.way2solo.com/photo/2021/65e9c882-dd22-4241-943e-954fa96afded.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;
&lt;img src="https://img.way2solo.com/photo/2021/e6c0544f-f15b-4ce7-9651-e4d3d7198641.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;然后在 E08 中为整数 i 赋予随机整数值，并使用条件分支来判断整数值。
&lt;img src="https://img.way2solo.com/photo/2021/102a31ee-bd3d-4b3c-ab26-21cdea4b0265.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;
&lt;img src="https://img.way2solo.com/photo/2021/4c28a7d7-1047-4d7b-98d4-583979954e61.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;如此，进入游戏对话。
&lt;img src="https://img.way2solo.com/photo/2021/a51f9d47-4cc5-44b4-ae81-c3c63d53203d.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;这样，我们就获得了不同的对话内容。&lt;/p&gt;

&lt;p&gt;不过，根据我们先前所说的，目前的 E08 触发器的内容是，只要地精商店出售任意道具，都一定会触发这对话。
让我们完善它，只有在玩家购买【对话】道具时，才显示对话内容。
&lt;img src="https://img.way2solo.com/photo/2021/d9b1fb2e-09fb-4439-9b65-0b34ab585848.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2021/7694723b-1897-4281-b632-95492d1a893e.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;这样，我们就获得了一个完整的对话内容。
（注：这里并没有考虑多人游戏的情况。）&lt;/p&gt;

&lt;p&gt;不过，我们不希望这种能够手动对话的 NPC 只是建筑。
因此我们为【安洁拉】添加【商店购买物品】技能。
&lt;img src="https://img.way2solo.com/photo/2021/f1c2eac9-d589-4bee-b5c1-c16971727a4a.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;然后为其【科技树 - 售出物品】添加【对话】。
&lt;img src="https://img.way2solo.com/photo/2021/3e433caf-f1af-4525-843f-80617f47e9ab.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;
创建相关触发器。
&lt;img src="https://img.way2solo.com/photo/2021/07868b44-4273-4be6-9c51-6e59c6f12389.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;这一次进入游戏，我们发现安洁拉并没有【对话】按钮。
原因是【商店购买物品】只能作用于【中立被动】单位上，而安洁拉属于【玩家 4】，是我们的玩家的同盟单位。
因此我们要在【商店购买物品】的基础上，增加【共享商店，联盟建筑物。】技能。
&lt;img src="https://img.way2solo.com/photo/2021/9a5ce0de-dd9f-4d38-892f-3f7ddfa28c5d.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2021/e3281f20-97c5-4756-abdf-e90320de2dcf.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;加上这些后，我们发现购买【对话】会让【对话】这个物品直接掉落到地上。
&lt;img src="https://img.way2solo.com/photo/2021/c073dbcc-cab2-4ab0-bb70-97c4842db231.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;然后让我们再添加【选择英雄】技能给安洁拉。
&lt;img src="https://img.way2solo.com/photo/2021/93e5c0d4-1940-40f5-ad31-17fb96e98437.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;
&lt;img src="https://img.way2solo.com/photo/2021/6b6c29d0-f489-43cc-a09a-3abaad1754cd.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;这次回到游戏中，我们的逻辑正常了。&lt;/p&gt;

&lt;p&gt;这次为安洁拉添加功能显得困难重重。
如果我不了解魔兽的运作机制，也许还得花费大量时间去询问为什么物品会掉落到地上，为什么有些商店可以出售物品，用单位就不行。
这些问题会出现，是因为魔兽争霸 3 存在一些由那时的工作人员在程序内设定好的【隐藏逻辑】。
这些隐藏逻辑没有什么说明书，全靠先行者的摸索以及他们将知识分享到社区得以流传下来。
详情请参见本期附带的【概念：隐藏逻辑】。&lt;/p&gt;

&lt;p&gt;概念：数据类型
只要是程序，就有数据。而只要是编程，就一定和数据脱不了关系。
魔兽地图编辑器是一种游戏制作工具，但其本质仍然是数据编辑器。&lt;/p&gt;

&lt;p&gt;在魔兽地图编辑器中，打开触发编辑器，然后打开变量窗口。
在创建变量时，任何一个新建变量都必然被要求指定一个【变量类型】。
这个变量类型，实际上就是【数据类型】。
&lt;img src="https://img.way2solo.com/photo/2021/605c3350-8e00-4f21-91e9-359bece7eeca.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;在上方图片内，列出了我们通过作者平台下载的编辑器中所提供的数据类型。
其中【布尔值】对应了取值只有 0 和 1 的【bool】（或称 boolean）；【整数】对应了 32 位整数【int32】，取值区间为 [-2147483647, 2147483647]；实数则对应了【real】。
诸如物品、单位、玩家、点，等等，均可以被归类为【对象】，在魔兽脚本中均来源自【handle】类型。
通过找到我们下载的编辑器目录下的 jass/system/ht/common.j 文件，可以找到这种继承关系。
&lt;img src="https://img.way2solo.com/photo/2021/b371fcca-3e27-4168-9a4d-eb1eb3ce38e5.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;
&lt;img src="https://img.way2solo.com/photo/2021/e0d206fc-aef5-4e1b-84b9-d99681a40c8a.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;
&lt;img src="https://img.way2solo.com/photo/2021/25559873-cb2e-49bd-a513-69e7c75eaece.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;数据一定有类型的区分，因而每一个变量都一定有专属的一套专用于对这种数据类型进行操作的函数。
你不需要现在立即理解这些话的意思，只要记得在撰写逻辑、填写参数的时候，输入的数据一定要和某个参数的数据类型相同。
剩余的在实践中会更快理解。
同样，如果你希望了解更多关于【数据类型】的知识，可以直接利用你手头的搜索引擎，搜索【数据类型】这个关键词。&lt;/p&gt;

&lt;p&gt;概念：马甲
在魔兽地图的制作中，一种经常被使用的技术是【马甲】。
魔兽地图编辑器提供了包含丰富的逻辑编辑功能的【触发编辑器】，但它仍然有很多局限性。
比如，魔兽地图编辑器内并没有【属于单位的按钮】。在本章中，NPC 的按钮实际上是我们通过【出售物品】来【模拟】的。
除了通过【物品】来模拟【按钮】，我们也可以通过【单位】来模拟按钮。因为在魔兽争霸 3 中，一个中立单位也可以直接【出售单位】。
这些被出售的、仅仅用于触发【单位被出售】、【物品被出售】这类事件的单位类型和物品类型，我们将它们称之为【马甲】。
这些单位类型和物品类型往往会在出售的同时立即被删除，因为它们存在的目的仅仅是为了触发触发器的事件检测机制，用于让游戏能够做我们需要的其它的逻辑。&lt;/p&gt;

&lt;p&gt;而除了这种被出售的马甲，今后我们还会遇到【技能马甲】、【特效马甲】。
这类马甲不会被立即删除，但会被创建后，用于施放技能、攻击等操作，或用于展示特效，从而帮助我们实现自行设计的、魔兽争霸 3 内不存在的更复杂的、机制更丰富的技能或系统。&lt;/p&gt;

&lt;p&gt;概念：隐藏逻辑
【隐藏逻辑】，就像游戏中的作弊码一样，是由开发者写下的，但并没有说明书公开的逻辑。
这些逻辑被挖掘出来后，经过逻辑编写者的组合，就能够达成特定的效果。
但这些逻辑本身因为过于隐秘，往往对于初学者会制造大量麻烦。
这些逻辑有些是被故意设定的，还有一些则是因为考虑不周而遗留下的 BUG。
这些 BUG 或机制，有些恶性的逻辑会被规避，有些良性逻辑则会被游戏制作者作为一种【快捷的特性】来使用。
无论是兴趣向的游戏制作工具，还是专业的游戏制作引擎，都是这样。&lt;/p&gt;

&lt;p&gt;魔兽中存在大量的这种【BUG】或者说【特性】，但其数量庞大，使得魔兽地图制作的深入显得不那么容易，甚至有时候会显得恼人。
因此当你遇到一些问题无法解决时，求助于社区是好的选择。因为在社区中，偶尔会有赋闲的老手愿意出手解答新人的问题，从而帮助他们更快搞定某个难题。当然，老手的帮助并不总是免费的，所有人的时间都很珍贵。因此当你在社区提问时，保持基本的礼仪和尊重是重要的。&lt;/p&gt;

&lt;p&gt;回到【隐藏逻辑】的话题，【隐藏逻辑】其实并不是什么好的东西，相反它会在学习过程中制造大量本不应该出现的麻烦。
这种问题往往会出现在【为一个现有的游戏制作 MOD】的情景下，魔兽地图的制作正是如此。
只不过撰写一篇完完全全极其详尽的 RPG 制作教程，就不会是同本教程一样稍显轻量了。
今后的更新中我们仍然会用到一些隐藏逻辑，也可能会被这些逻辑困扰。但如果我们的目的不是深入到程序的根源去撰写全新的 RPG 游戏，我们就需要依赖于某些特定的、现有的游戏，或工具集。&lt;/p&gt;

&lt;p&gt;我个人并不认同依赖【隐藏逻辑】进行游戏制作。
但在游戏制作中，这些特性到底是好是坏，取决于游戏的真正制作者。
那些一线的设计师、开发者们，以及这些特性能否最终帮助我们呈现出更好的游戏给我们的最终受众——玩家们。&lt;/p&gt;</description>
      <author>DreamerQW</author>
      <pubDate>Sat, 16 Jan 2021 12:43:01 +0800</pubDate>
      <link>https://beta.w2solo.com/topics/811</link>
      <guid>https://beta.w2solo.com/topics/811</guid>
    </item>
    <item>
      <title>《从零开始的 RPG 游戏制作教程》第七期：触发器与逻辑</title>
      <description>&lt;p&gt;往期回顾&lt;/p&gt;
&lt;h3 id="目录"&gt;&lt;strong&gt;&lt;em&gt;目录&lt;/em&gt;&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://indiehackers.net/topics/673" rel="nofollow" target="_blank" title=""&gt;1. 前言&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://indiehackers.net/topics/675" rel="nofollow" target="_blank" title=""&gt;2. 第一期：制作基础场景&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://indiehackers.net/topics/689" rel="nofollow" target="_blank" title=""&gt;3.第二期：让勇者和怪物登场&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/727" title=""&gt;4.第三期：基础的数值设计&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/745" title=""&gt;5.第四期：从理论的角度简单聊聊关卡&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/767" title=""&gt;6.第五期：制作物品和技能&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/774" title=""&gt;6.第六期：设置怪物掉落物并部署关卡怪物&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;第七期：触发器与逻辑&lt;/p&gt;

&lt;p&gt;本期我们终于要接触到触发器和逻辑。
不废话，让我们先直接从例子开始讲述。&lt;/p&gt;

&lt;p&gt;制作一个大门，当克里夫携带钥匙来到大门前时，能够打开大门&lt;/p&gt;

&lt;p&gt;打开地形编辑器，找到关尾。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2020/15dc7b6d-b064-4c36-8dc5-ba4d6f1b76cc.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;为了让关卡的目的显得更明显，我们不把大门放在 BOSS 的后面，而放在小径的前方。
为此我们需要对场景再做一些修改。
&lt;img src="https://img.way2solo.com/photo/2020/2643b3e9-c715-4780-9efa-8db44f4cad9c.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;关尾的修改完成。&lt;/p&gt;

&lt;p&gt;不过本节要讲述的不是增加一个大门，而是实现一套逻辑。
当勇者携带钥匙大门的钥匙来到门前时，能够打开大门。&lt;/p&gt;

&lt;p&gt;在魔兽争霸中，大门只有 2 种方式打开，一种是直接暴力摧毁它，一种是通过触发器逻辑来打开它。
&lt;img src="https://img.way2solo.com/photo/2020/4583963f-ecd8-45d7-8280-0e5cecdd8dd7.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;在介绍触发编辑器之前，我们先完成本节的工作。
回到地形编辑器，按 A 打开工具面板，按 R 进入区域面板。
&lt;img src="https://img.way2solo.com/photo/2020/673150b9-9a6c-4bf9-9dd6-cb7f9e6c11b8.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;点击矩形区域按钮，进入【添加】模式。
&lt;img src="https://img.way2solo.com/photo/2020/6772bf28-bfb1-4a46-b098-476255694323.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;回到场景，鼠标左键拖拽出一个矩形区域。
&lt;img src="https://img.way2solo.com/photo/2020/97f5bd03-0716-4df3-995d-8b9c487a19e1.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;按下 F4 回到【触发编辑器】。
默认的，我们可以看到如下的窗口。
&lt;img src="https://img.way2solo.com/photo/2020/d8ac93ea-7df5-4352-8d8e-e2a8348ca555.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;由于在本教程中我们使用的是魔兽争霸对战平台提供的修改后的魔兽地图编辑器，因而在这里有来自修改后的默认触发器。
我们直接删掉【简介】，然后点击新触发按钮来创建一个新的触发器。
&lt;img src="https://img.way2solo.com/photo/2020/3a208e6e-5768-4458-869f-b5aa5d98b7b7.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2020/df8e4f10-a3c3-44c1-971e-81d8ab266522.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;选中该触发后按下 F2 或者用鼠标左键点击一次，进入编辑名字的状态。
&lt;img src="https://img.way2solo.com/photo/2020/f9383f18-bd2b-476c-9cb3-60d80f502230.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;如上图，将新创建的触发器名字改为【E00 钥匙开门】，并将其所属目录改为【事件】。
这么改的目的是为了将逻辑分门别类，不过你也可以探索出自己的使用方式。
另外需要一提的是，这里的【E00】前缀是用于防止触发器冲突的。
在触发编辑器中，触发器中的【中文字符】和【特殊字符】都会统一被游戏转换为 “_” 符号，因此即便当我们为触发器修改了不同的中文名字，编辑器本身也会把它们视作相同名字的触发器。
&lt;img src="https://img.way2solo.com/photo/2020/e678e65f-0c96-4463-bb0f-5d0845841d89.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;如上图，这里的原理我们暂不多说，但如果想要规避这种冲突，就可以使用阿拉伯数字 + 字母进行名字的区分。
&lt;img src="https://img.way2solo.com/photo/2020/e7dc7b0c-7ce3-498a-ab6e-6e0c4456bda8.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;回到正题，我们现在要实现一个游戏逻辑，即当玩家操作的单位【克里夫】来到大门前（我们通过【矩形区域】来判断）时，如果他携带了物品【大门的钥匙】，我们就要打开大门。
我们先忽略这里面涉及的新的概念，先直接完成这个游戏逻辑。&lt;/p&gt;

&lt;p&gt;在我们的【触发器】中，在【事件】处右键，选择【新事件】，并找到【单位进入区域】事件。
&lt;img src="https://img.way2solo.com/photo/2020/9271a460-bd81-4265-8cb8-cf3e1db6a43c.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;
&lt;img src="https://img.way2solo.com/photo/2020/52a8cd04-e753-4466-a712-f08cc4be09c6.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;选中后，我们可以填写这个事件的【参数】。
&lt;img src="https://img.way2solo.com/photo/2020/0ad5d914-6e08-4a13-8fc2-d6e28b2f6396.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;点击红色的【矩形区域】文字，在弹出的对话框中选择我们先前在场景中创建的【矩形区域 000】。
&lt;img src="https://img.way2solo.com/photo/2020/69cbd0e9-d61a-4d83-8807-a5c27ff50cf8.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;随后点击确认，我们便为这个触发器创建了一个触发事件。
&lt;img src="https://img.way2solo.com/photo/2020/a1ce75dd-652d-492e-98ff-ce7ea85960a0.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;为了执行后续开门的动作，我们需要先限定条件：
1 进入的单位是克里夫
2 克里夫的物品栏里有【大门的钥匙】&lt;/p&gt;

&lt;p&gt;在【条件】处右击，新建条件。
&lt;img src="https://img.way2solo.com/photo/2020/b486de9f-66d0-46de-9428-43c0d8b98b95.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;找到【单位】。
&lt;img src="https://img.way2solo.com/photo/2020/8c3e6e5e-34b5-4916-9944-b5256774dddf.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;
&lt;img src="https://img.way2solo.com/photo/2020/85692ab9-dcbf-4d3c-9c48-fd8be831ccc6.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;在这里，(触发单位) 就是指触发了本触发器事件的单位，即指代进入了矩形区域的单位。
不过为了更清晰的理解，我们可以点击 (触发单位)，并在下拉列表中将其替换为 (事件响应 - 进入的单位)。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2020/ad9a2800-c81e-49ea-82d3-82bddf7fbf74.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;
&lt;img src="https://img.way2solo.com/photo/2020/fb47ae09-0cd9-49ed-8edc-ddf1677f71f7.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;这些列表中的功能，被定义为【函数】。
&lt;img src="https://img.way2solo.com/photo/2020/5df77e30-79cf-41dc-a5b5-b90ed189417e.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;函数的概念我们将会在后续讲解，先点击确认，然后继续编辑我们的【条件】。
&lt;img src="https://img.way2solo.com/photo/2020/e871f9fa-5707-4059-afa0-6dfe0f5ab52c.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;在这里点击红色的【单位】，在弹出的窗口处点击【选择一个单位】。
&lt;img src="https://img.way2solo.com/photo/2020/7e72d2ef-569b-420a-bb58-9b8972e83fb7.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;随后窗口会自动跳转到【地形编辑器】，通过鼠标右键拖拽，找到【克里夫】，左键点击他。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2020/5cafcb9d-b5d7-4d42-a843-e8b7ed923d74.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;
&lt;img src="https://img.way2solo.com/photo/2020/3703c2a5-1fa4-4e91-acf7-28e2848410cc.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;一个【平凡的勇者 0060 &amp;lt;预设&amp;gt;】现在出现在了【变量】栏中。
点击确定，我们便完成了第一个条件的添加，将其切切实实地录入到了游戏逻辑中。
&lt;img src="https://img.way2solo.com/photo/2020/0b672986-1dd7-445a-99b8-bcfb06483ce7.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;再创建一个新条件，用于判断克里夫（平凡的勇者）是否携带了【大门的钥匙】。
这一次我们找到【布尔表达式】。
&lt;img src="https://img.way2solo.com/photo/2020/8c3fd032-3984-4373-b0b9-4a9c61a2c2bb.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;点击第一个参数，在函数列表中找到【英雄 – 持有物品 (指定类型)】。
&lt;img src="https://img.way2solo.com/photo/2020/310b2993-80ba-4798-96d3-8facada8d01c.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;修改两个参数，第一个参数可以不变，也可以修改为【进入的单位】，也可以改为【平凡的勇者】。
第二个参数必须修改为【大门的钥匙】。
&lt;img src="https://img.way2solo.com/photo/2020/6e2f5122-7b73-4890-be8d-ab4d324887b8.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;点击确认后，我们完成了 2 个条件的编辑。
&lt;img src="https://img.way2solo.com/photo/2020/60bd6575-1f03-4151-9e19-49688690a019.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;随后，我们要完成最后一步：打开大门。
在【动作】处右键，添加新动作。
&lt;img src="https://img.way2solo.com/photo/2020/cf2d73ec-29fc-434a-b4ae-e34c344131ba.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;在弹出的动作窗口，左上角选择【可破坏物】。
&lt;img src="https://img.way2solo.com/photo/2020/cbe1db85-fadb-4e85-8183-a2973fa58f00.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;然后找到该分类下的【打开/关闭/破坏大门】动作。
&lt;img src="https://img.way2solo.com/photo/2020/4574e6ce-2f30-45d5-b1db-2e2a517ee293.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;点击【大门】，在参数窗口点击【选择可破坏物】。
&lt;img src="https://img.way2solo.com/photo/2020/b2a0af1a-f6ba-4ef0-82c2-d1342f7e70b1.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;随后窗口再次被切换到地形编辑器窗口，右键拖拽找到我们的大门，左键点击它。
&lt;img src="https://img.way2solo.com/photo/2020/c5d7bdb1-9fff-4580-bdf6-f0601b2ab21d.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2020/3664c16a-e570-4a6b-a344-0504410550e8.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;得到结果如下。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2020/6de08639-2534-40f3-b4cb-e1110c79b213.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;到此，我们完成了一个基本的游戏逻辑的编写。
现在，当我们让克里夫携带钥匙来到大门时，大门就会打开。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2020/d61a036a-fc8e-4579-8dd2-3717360daa09.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;
&lt;img src="https://img.way2solo.com/photo/2020/0e5dd55b-bc44-4227-b413-ea73eb65c172.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;让我们来聊聊游戏逻辑和触发器&lt;/p&gt;

&lt;p&gt;触发器是技术领域的切入口，无数事件、动作，组合成无数逻辑。
当你按下灯的开关，灯会对应的亮起或关闭。
但如果你按下一个坏掉的开关，灯不会变化。
如果一个开关接触不良，灯会不定时闪烁。
如果开关正常，也有可能电线因为各种问题出现毛病而不定时闪烁。
如果开关和电线都没有问题，但灯也在闪烁，也有可能是电线通道内有老鼠在啃电线。&lt;/p&gt;

&lt;p&gt;当然，本教程不是来讲电路的。
上述例子讲的是逻辑规则，如果有某个【结果】发生了，一定存在某个【原因】，无论这个原因是否被我们所知。
因果关系是纵横在这世界的，有些因果不被理解甚至不符合大众常识，有些则显而易见。
前者衍生出魔术、神算之类分支，后者则是常规生活，就像拧开水龙头，通常水就会流出来。&lt;/p&gt;

&lt;p&gt;游戏逻辑实际上是从属于程序逻辑的，因而在进入这个领域后，我们已经切切实实地开始了程序世界的旅途。
让我们把话题切回制作。
&lt;img src="https://img.way2solo.com/photo/2020/02e25399-4ad6-48d7-aefa-347ba527927e.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;【触发器】这个词语是一个术语。
在讲述后续的逻辑制作之前，我们得建立对这玩意儿的认知。
就像本教程前言所述，我们会假设正在阅读的你没有什么程序开发经验，是入门级的爱好者。&lt;/p&gt;

&lt;p&gt;在魔兽地图中，它是由事件、条件、动作组成的东西。
在【游戏运行的过程】中，如果游戏发生了某个或某几个【特定的事件】，这些事件会被【触发器】发现。
当【触发器】发现这些事件后，它会检查该事件的要素，如时间、地点、人、物，是否符合让自己执行特定【动作】的【条件】。
如果【条件】成立，则触发器会【执行动作】。
&lt;img src="https://img.way2solo.com/photo/2020/b0819c0e-7ea6-4a94-aa85-4d41dfc63518.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;通俗的例子：当有人按下门铃时，门铃会响。
在这个例子中，事件是【有人按下门铃】，动作是【让门铃响起来】。
不过实际上，就算按下门铃的不是【人】，只要【门铃被按下】，也会触发【门铃响起来】这么一个结果。
同样，在上述规则中，无论门铃是否损坏，门铃一定会响起来。
但这实际上不符合客观规律。&lt;/p&gt;

&lt;p&gt;因而我们应当这样去整理规则。
事件：门铃按钮被按下
条件：门铃是电子铃，并且电子门铃的电路没有损坏，并且电子门铃的电池还有让其响起的电，并且按钮被按下的幅度能够触及电路
动作：让【按钮关联的电子门铃】响铃
显然，这样更符合现实逻辑。&lt;/p&gt;

&lt;p&gt;不过，【门铃】并不会自己响起来。
所以事实上人按下门铃按钮并让电子门铃响起来，并非是由【单个触发器】完成的。&lt;/p&gt;

&lt;p&gt;我们实际上存在这样的组合。
【触发器 1：通电】
事件：电子门铃按钮被按下
条件：按钮被按下的幅度能够触及电路，并且关联被按下的按钮的电子门铃组件内的电池还有电
动作：电池放电
【触发器 2：响铃】
事件：电池放电
条件：电池所放电流能够触及响铃组件
动作：响铃组件开启电通路，在接下来 5 秒内持续通电
【触发器 3：发音】
事件：响铃组件受到电刺激
条件：无
动作：振动发音组件
以上 3 个触发器，各自包含事件、条件、动作，共同完成了【当电子门铃被按下时，电子门铃响铃】这么一套逻辑。
而在实际的游戏逻辑设计中，我们也经常会出现多个触发器，经历多次判断，共同完成一套逻辑的情况。&lt;/p&gt;

&lt;p&gt;到这里，你应该大致理解了触发器的概念，以及它的作用。
在本教程中，我们没有从术语角度明确清晰地规定【触发器】的定义，如果你想要了解相关的严谨术语定义，可以自行搜索。
我们着重于从通俗生活和实际使用的角度进行阐述，让你大致能够理解它是什么。
我们可以通俗地理解为，它是一系列【关系】的组合，按照特定的【规则】， 来达成特定的【结果】。
在实际制作中，我们可以通过魔兽地图编辑器提供的现成的无数【事件】、【条件】、【动作】，来根据我们的需要，组合出不同的结果。&lt;/p&gt;

&lt;p&gt;不过不同于现实。
在现实中，【逻辑】用于【描述】客观规律，而在游戏中，【逻辑】用于【定义】客观规律。
换言之，游戏内发生某件事情后诞生的结果，是由游戏制作者【定义】的。
就像现实中，【人被杀，就会死】，这是基本的逻辑。
而在游戏中，我们可以改变这个因果，比如【人被杀，就会爆炸、10 秒后复活并升级】。
这不符合常理对吧？但我们制作的并不是现实世界，而是游戏。
除非我们的游戏需要【常理】，否则常理在这里就没有意义。&lt;/p&gt;

&lt;p&gt;如果你对【触发器】和与之相关的【触发】、【事件】、……等等的概念仍然还很模糊，不用担心，在接下来的教程中我们会更频繁地提到它。
不用担心现在不能 100% 理解它的含义，实践会帮助你更充分去理解和消化。&lt;/p&gt;

&lt;p&gt;当玩家抵达防线出口时，游戏胜利&lt;/p&gt;

&lt;p&gt;让我们继续完成剩余的工作吧。
接下来，如果我们要实现【当玩家抵达防线出口时，游戏胜利】这一功能，我们需要能够捕获到【玩家抵达防线出口】这一事件。&lt;/p&gt;

&lt;p&gt;在魔兽地图中，我们有【矩形区域】。
矩形区域可以用于捕获游戏内的单位【进入区域】或者【离开区域】的事件。&lt;/p&gt;

&lt;p&gt;让我们回到我们的场景，在最终大门的后方再创建一个矩形区域。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2020/f3103f66-f70b-4d36-acc3-68cf8bba4bf6.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;先前我们已经撰写了大门的触发器，当大门没有开启时，勇者并不能穿过大门。
而当大门开启后，我们需要让玩家抵达【出口】。
我们新创建的矩形区域，实际上定义了出口。
即，【新创建的矩形区域所指的范围，在本关卡逻辑中是 “出口”】。
当勇者抵达这个范围内，就算【抵达了出口】。&lt;/p&gt;

&lt;p&gt;为此，我们需要用触发器来描述这个逻辑定义。
&lt;img src="https://img.way2solo.com/photo/2020/e9334558-1595-40d6-a0df-7f110981df53.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;同先前的触发器，我们定义好进入的单位必须是【勇者】后，再找到魔兽地图编辑器提供的【游戏胜利】动作。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2020/a3b9f579-ce6b-467c-b47f-6138acd8b4f3.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;
&lt;img src="https://img.way2solo.com/photo/2020/b14963d5-92b8-40c5-8ace-3a952be096cf.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;点击确认后，当勇者抵达这个区域，本局游戏便胜利了。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2020/443ce39f-6bc1-46fd-ba2c-717969f60c01.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;同样，只要这个触发器在，【矩形区域 001】（我们新创建的矩形区域）就永远会触发【让玩家 1 胜利】这个动作。
因而即便我们把这个矩形区域放置到一开始勇者身后，只要他踏入了这个区域，就一定会触发这个动作。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2020/23f1cff7-5818-4c78-9f8a-0b4f9cbda411.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2020/d59d2199-9811-47db-9e58-b756a78fed6c.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;当然，如果我们不希望这结果被投放到最后发布的地图中，我们就得确保不要在哪次编辑中意外地修改了这个矩形区域的位置，否则就可能出现这样的意外。
——这种意外往往被我们称呼为 BUG，一种在程序世界中喜 (shen) 闻 (wu) 乐 (tong) 见 (jue) 的恼人生物。
如果你不希望体验浪费整整半天时间、甚至完全重构了整个地图逻辑就为了查一个不起眼 BUG 的经历，那么当你对待逻辑的时候可就一定要养成严谨的好习惯。尽管这是几乎是所有尝试在程序世界中前进的人都会体验的经历，但它归根结底并不是我们最终的、即推出游戏作品或游戏产品、这么一个目的。&lt;/p&gt;

&lt;p&gt;当克里夫死亡时，游戏失败&lt;/p&gt;

&lt;p&gt;废话不多说，让我们直接上图。
除了任意单位事件，在魔兽中我们也有【指定单位事件】。
使用一些便捷的事件往往可以节省我们宝贵的时间。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2020/4a9723b8-fba4-49ad-a96c-c472368b7634.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;同样在【游戏】分类中，找到【游戏失败】动作。
&lt;img src="https://img.way2solo.com/photo/2020/2512a2fd-9a24-4228-8a5f-c57b7f81ba76.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2020/48f84346-4bf4-408d-93e6-b4f55b89004e.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;创建一个主线任务在任务栏，用于提醒&lt;/p&gt;

&lt;p&gt;如果我们不希望玩家进入游戏后一脸懵逼不知道自己干什么，那么我们最好告诉他。
在魔兽游戏中，左上角有任务栏可以供玩家在不知道自己干什么的时候了解自己应该干什么。
本节我们就添加任务，来实现这个功能。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2020/a636ea8b-59ce-4ac5-9a21-08b3f1e8d4b4.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;创建一个新的触发器，设置其事件为游戏时间逝去 2 秒。
&lt;img src="https://img.way2solo.com/photo/2020/4700004b-3e58-4f52-b467-f212137bb483.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;在触发器动作清单中，有【任务】分类，提供了大量与游戏任务相关的功能。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2020/2aa04f37-7ccc-4331-b026-08ce3a14044a.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;创建任务：离开森林
&lt;img src="https://img.way2solo.com/photo/2020/00780e26-15ab-40b3-b05e-76f2e94ad597.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;“为了从魔王手下救出于水火中的世界，你需要先抵达王国。
但在那之前，你必须先离开你居住的森林。“&lt;/p&gt;

&lt;p&gt;除了设置标题和文本，我们还可以修改任务的图标。
点击任务图标后的路径，便可以通过列表查找图标。
&lt;img src="https://img.way2solo.com/photo/2020/0c373a98-91b9-4807-b711-4050c3e8afe9.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;
&lt;img src="https://img.way2solo.com/photo/2020/dd4b7221-3578-4800-9412-3feea172fcb3.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;在魔兽中，“创建任务” 并不会直接提示玩家获得了新任务，因此我们需要手动向玩家发送信息，告诉他任务内容，以使得玩家能够注意到。
我们可以通过【发送任务信息】来达成这个事情。
&lt;img src="https://img.way2solo.com/photo/2020/9c0e9b6f-731b-4e42-bc1c-de1dafc122fd.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;此外在发送消息后，如果我们想让玩家知道有【任务栏】的存在，我们还可以追加一个动作，即【闪动任务按钮】。
&lt;img src="https://img.way2solo.com/photo/2020/3aa43dc2-24da-40be-a82a-b08587acc4bd.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;在这里，我额外设置了 5 秒等待，是因为玩家阅读发现任务信息时，其注意力放到了文字上，很可能不会注意到任务按钮。
而如果等待 5 秒再闪动按钮，便能够在玩家的注意力还在【系统给予的信息】上，但又没有【具体地关注某个信息】时，再次抓住玩家的注意力。&lt;/p&gt;

&lt;p&gt;尽管在程序功能上，无论是否有等待，任务按钮一定会闪烁，任务消息一定会发送。
但是，【设计】之所以能够在如今的游戏行业（乃至互联网行业）中成为一门细分的、与【技术】形成不同方向的类目，正是因为它能够让一个游戏不止是程序。&lt;/p&gt;

&lt;p&gt;关于设计和技术（制作）的区别，这在实践中已衍生出非常多理论和关系，并且目前仍然有许多从业者、爱好者对此进行讨论。
如果你感兴趣，不妨自行搜索更多相关资料。&lt;/p&gt;

&lt;p&gt;到此，我们已经完成了第四期提到的内容，这也宣告我们的入门章节结束。
接下来的更新我们将进行更深入的知识讲解，欢迎关注。&lt;/p&gt;</description>
      <author>DreamerQW</author>
      <pubDate>Thu, 31 Dec 2020 19:56:32 +0800</pubDate>
      <link>https://beta.w2solo.com/topics/782</link>
      <guid>https://beta.w2solo.com/topics/782</guid>
    </item>
    <item>
      <title>《从零开始的 RPG 游戏制作教程》第六期：设置怪物掉落物并部署关卡怪物</title>
      <description>&lt;p&gt;往期回顾&lt;/p&gt;
&lt;h3 id="目录"&gt;&lt;strong&gt;&lt;em&gt;目录&lt;/em&gt;&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://indiehackers.net/topics/673" rel="nofollow" target="_blank" title=""&gt;1. 前言&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://indiehackers.net/topics/675" rel="nofollow" target="_blank" title=""&gt;2. 第一期：制作基础场景&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://indiehackers.net/topics/689" rel="nofollow" target="_blank" title=""&gt;3.第二期：让勇者和怪物登场&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/727" title=""&gt;4.第三期：基础的数值设计&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/745" title=""&gt;5.第四期：从理论的角度简单聊聊关卡&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/767" title=""&gt;6.第五期：制作物品和技能&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;第六期：设置怪物掉落物并部署关卡怪物&lt;/p&gt;

&lt;p&gt;设计一个比普通的狗头人强大的狗头守卫&lt;/p&gt;

&lt;p&gt;由于在先前的教程中我们已经细致地说明过很多次物体编辑器的操作方式，接下来的讲述中，为了讲述的效率，我们将不会再对物体编辑器的操作流程进行过多赘述。&lt;/p&gt;

&lt;p&gt;在第一关我们需要一个【狗头人守卫】来作为守门的 BOSS，玩家必须击败这个 BOSS 才能获得钥匙从而打开边境大门。
打开物体编辑器，我们找到【狗头人】。
&lt;img src="https://img.way2solo.com/photo/2020/032ea2be-f82c-42f8-b562-8e95fd3a9809.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;复制粘贴它，获得一个自定义的狗头人，改名为【狗头人守卫】。
&lt;img src="https://img.way2solo.com/photo/2020/c68ba54b-f5e3-4e52-aa39-dec1e56328f1.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;为了区别它和常规的狗头人，我们可以修改其模型大小和颜色，使得其更符合【BOSS】的直观感受。
&lt;img src="https://img.way2solo.com/photo/2020/06b6df62-8b3e-4004-bde0-02a0887a940e.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;得到的结果如下：
&lt;img src="https://img.way2solo.com/photo/2020/d3f12176-8f72-47da-a719-3a44e005a60d.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;这样我们就得到了和普通的【狗头人】有明显【区分度】的【狗头人守卫】，我们的玩家就可以非常直观地直接从视觉上就知道这个怪物和其它怪物不一样，它不好惹。&lt;/p&gt;

&lt;p&gt;为了让战斗更有挑战性，我们提高【狗头人守卫】的生命值为普通狗头人的 5 倍，并将其攻击力提升为普通狗头人的 3 倍。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2020/a9600151-7f6d-4a9b-989d-298e854de7a9.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;这样我们的玩家就必须在面对 BOSS 之前，先收集足装备、药水来与之对抗。
这就引入下一个我们要讲的内容：设置怪物的掉落物。&lt;/p&gt;

&lt;p&gt;设置关卡中怪物的掉落物&lt;/p&gt;

&lt;p&gt;如果勇者击杀怪物后没有办法成长，无论击杀多少个怪物，勇者都不会变得更强，我们的战斗设计就会变得非常难以进行。
因为这种情况下，玩家控制的勇者只会在战斗中受伤并且得不到恢复，即便操作水平再强，也会被怪物们杀死。&lt;/p&gt;

&lt;p&gt;因此我们必须设计一种方式能够让勇者在打败怪物后能够恢复自己的血量、提升自己的战斗力。
典型的手段便是在玩家击杀怪物后，让怪物可以掉落物品。&lt;/p&gt;

&lt;p&gt;回到我们的场景中，找到放置在地图上的任意【狗头人】，双击它。
&lt;img src="https://img.way2solo.com/photo/2020/e776be90-cce9-4bdc-910b-f5cfa7246a47.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;在打开的【单位属性】窗口中有【掉落物品】这一分页。
在这里，我们可以针对某个单独的怪物设置其可能的死亡掉落物。
&lt;img src="https://img.way2solo.com/photo/2020/1166b599-067d-46ab-ba39-d4fd9232658f.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;在魔兽争霸 3 中，一个单位的死亡掉落设置是通过【物品列表】来实现的。
我们可以创建【通用物品列表】来方便多个怪物都使用指定的物品列表，也可以针对特别的单位（往往是 BOSS 或者会掉落特殊任务物品的单位）使用【自定义物品列表】。&lt;/p&gt;

&lt;p&gt;让我们先介绍【通用物品列表】。
在怪物的【死亡掉落物品】属性栏处选择【从物品列表中查找】。
&lt;img src="https://img.way2solo.com/photo/2020/07ec8e8e-d6ef-461e-a03d-acb8ee22f0e2.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;可以看到目前我们的地图中没有任何物品列表。
让我们点击【编辑物品列表】来创建新的列表。
&lt;img src="https://img.way2solo.com/photo/2020/5e7086b5-7738-476a-b1ac-9a102f7aa7c6.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;在弹出的【物品列表】窗口，点击【添加列表】按钮，我们可以得到新的物品列表。
&lt;img src="https://img.way2solo.com/photo/2020/c9a39349-e0be-4c6f-a3c1-6265387bb8f1.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;按照我们的需求来修改命名。
&lt;img src="https://img.way2solo.com/photo/2020/cef85d98-9278-4104-bfd7-2e8fa00d6ed5.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;其中【彩蛋】和【稀有装备】我们暂且不管，先制作【低级补给】和【低级装备】。
选中【低级补给】后，在右侧点击【新设置】，并在创建了新设置后点击【新物品】来为其添加掉落规则。
&lt;img src="https://img.way2solo.com/photo/2020/fd35f2b4-22f2-4914-b2cc-77d2950d3080.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;上图的【物品设置 2】中的【随机 等级 1 可购买 物品】仅用于举例，说明我们不光可以指定掉落特定的物品，还可以直接随机掉落符合指定分类的所有物品，如下。
&lt;img src="https://img.way2solo.com/photo/2020/300526ff-a526-4384-8535-0d6e4e533418.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;在一个单独的【物品设置】中，会按照总共为 100% 的概率进行 N 选 1 的随机判定。
不过一个物品列表中可以包含多个物品设置，意味着击杀一个怪物的时候，这个怪物可能会掉落最多和列表包含的怪物设置数量相同的物品。
比如，按照下图设置，我们的玩家在击杀拥有此物品列表的怪物时，这个怪物会有 40%*10%*5% 的概率掉落全部 3 个小型生命药剂。&lt;br&gt;
&lt;img src="https://img.way2solo.com/photo/2020/bff493b3-a090-4f75-a202-338985b280a9.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;【低级补给】让我们暂时就这样设置，同时【低级装备】如下：&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2020/a9d62c91-6ade-4153-8eb5-ab46ca7d6f9c.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;修改完成后点击确定，回到怪物窗口的【掉落物品】分页，可以看到现在有 4 个物品列表可供选择。
&lt;img src="https://img.way2solo.com/photo/2020/95e3e7e8-6cd1-44b3-b3ec-f1c0274c12f6.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;根据我们的需要来选择其中一项。
&lt;img src="https://img.way2solo.com/photo/2020/c2ef8d79-b1ee-482d-8cd3-e2514ce2ffc0.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;点击确定，回到场景。
&lt;img src="https://img.way2solo.com/photo/2020/a43a287f-d823-470b-a512-a90a6f19c6d8.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;一个白色的标记环出现在了怪物脑袋上，这说明这个怪物拥有【掉落物品】的设置。&lt;/p&gt;

&lt;p&gt;此外，如果我们同时勾选这些狗头人，我们可以同时编辑多个怪物的【掉落物品】设置。
&lt;img src="https://img.way2solo.com/photo/2020/c8ad3e2a-92fb-40af-8193-f06a975559bd.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2020/4f54612c-09c8-4c5b-9246-800fc41c4cae.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;这样一来，这 3 个狗头人都会在死亡时，遵循【低级补给】的掉落物品规则进行演算并给予玩家奖励。&lt;/p&gt;

&lt;p&gt;接下来我们找到刚才放在场景上的【狗头人守卫】。&lt;/p&gt;

&lt;p&gt;我们对【狗头人守卫】使用【自定义物品列表】。&lt;/p&gt;

&lt;p&gt;我们需要【狗头人守卫】在死亡时掉落【大门的钥匙】，不过这个物品现在还没有制作。
让我们先到物体编辑器中制作它。&lt;/p&gt;

&lt;p&gt;在物品的【战役】分类中，我们可以找到【月之钥匙】。
复制粘贴它，改名为【大门的钥匙】，并修改相关描述。
&lt;img src="https://img.way2solo.com/photo/2020/b5a6b29f-3ed8-4b48-b7d0-f81ac1077246.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2020/d291884e-db25-4154-a726-9014617fac48.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;你可能会好奇为什么我没有修改【文本 – 提示工具 – 基础】的文本。
这是因为这个文本对应的是当该物品被放置到商店里进行出售时的标题，在我们的游戏中，【大门的钥匙】只会在击杀【狗头人守卫】时掉落，所以我们并不需要修改此处。&lt;/p&gt;

&lt;p&gt;回到场景，找到先前放置的【狗头人守卫】。
&lt;img src="https://img.way2solo.com/photo/2020/dfb6fa2d-4ee7-46cc-9ea9-6bde9e023298.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2020/421af0be-a80f-4ef2-904c-cb6b63f87630.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;如此设置后，当玩家击杀这个狗头人守卫，这个守卫就必然会掉落【大门的钥匙】。
不过，如果我们重新创建一个新的狗头人守卫（注意不是复制已经设置好自定义物品列表的狗头人守卫），你会发现新的狗头人守卫并没有这个自定义物品列表。
&lt;img src="https://img.way2solo.com/photo/2020/df7b7c00-3cc5-416f-8f34-2aa077dce596.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;这是因为自定义物品列表是针对【单个单位】的，并不会绑定到【特定单位类型】上。&lt;/p&gt;

&lt;p&gt;远景剪裁&lt;/p&gt;

&lt;p&gt;在进行后续内容之前，我们补充一个知识：【远景剪裁】。
魔兽争霸 3 是一个上帝视角的 3D 游戏，在游戏内使用【镜头】作为玩家的观察视角。
&lt;img src="https://img.way2solo.com/photo/2020/f680a221-20ca-4914-97b5-2de1f960e2af.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;如图，在【镜头】中有一个属性是【远景剪裁】，决定当前镜头能够看到的最远处。
当你在地图编辑器中将鼠标滚轮向后滚动时，游戏镜头会变高，从而能够看到更广的场景。但如果高到一定程度，就会出现如下图的黑色交界线。
&lt;img src="https://img.way2solo.com/photo/2020/1acf7344-4591-4bed-af3c-7993e3367682.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;但在设计关卡时，有时候我们需要将镜头拉高以便于总览关卡的整体，因而需要消除这黑线。
&lt;img src="https://img.way2solo.com/photo/2020/0c873cc3-d3ef-4ef8-8a4d-c9df24712481.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;使用【Ctrl+ 鼠标滚轮向后滚动】，可以增加编辑器中镜头的【远景剪裁】的值，这样你就能够总览整个地图。&lt;/p&gt;

&lt;p&gt;基于克里夫的强度放置怪物，分布到场景中&lt;/p&gt;

&lt;p&gt;回到正题，现在我们已经制作了克里夫的物品和技能、制作了守门的怪物、能够设置怪物的掉落物。
换言之，我们现在具备了第一关的基本材料了。&lt;/p&gt;

&lt;p&gt;先前我们的场景是上下开放的，这在场景上说得过去，但游戏关卡不是纯粹地制作风景，因此我们需要按照关卡需求来调整我们的场景。&lt;/p&gt;

&lt;p&gt;我们希望塑造的体验是：
1 玩家刚离开村子后便会陆续发现零散的狗头人（离开村子后会遭遇轻量级战斗）
2 在抵达边境大门的路上，会有数个散落的狗头人村落（经历了轻量级战斗后，玩家需要学会如何应对群落）
3 边境大门是狗头人营地，存在大量狗头人（对抗守卫之前的挑战，同时也是用于积攒最终对战的道具）
4 有一条小路可以绕过营地来到后方，直接和狗头人守卫战斗（最终战）&lt;/p&gt;

&lt;p&gt;这一流程的目的是为了塑造前期的轻量级战斗用于教学和让玩家熟悉，逐渐提高的难度则用于磨炼玩家的战斗技巧，并使用狗头人守卫来作为最终测试。
而我们保留一条小路，则是为了给那些熟练 RPG 的、想要直接挑战 BOSS 的玩家一个分支选择。这种小路的设计并不是必须的，但它会一定程度的影响关卡的节奏，进而影响一部分玩家的游戏体验。同时，它也是【探索】的一环，对于多周目的玩家而言，这就是一种新的体验。&lt;/p&gt;

&lt;p&gt;好了，按照现在我们的关卡需求，先前的场景是不符合我们的要求了——我们不能让玩家一开始就可以选择。
让我们堵上一开始村子向下的路。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2020/a4f94762-c31e-4a7e-85fc-1905cd63077b.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;然后在其下方，把原本闭塞的树林处打开一条通路，能够拥有两条路线。
&lt;img src="https://img.way2solo.com/photo/2020/76d6c728-ddad-4a49-a4b1-024906b94b1f.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;最后，我们设定下方是小路，上方是狗头人营地，因而为了让营地更大，我们再做一些修改。
&lt;img src="https://img.way2solo.com/photo/2020/70055b08-e332-4914-a8cd-3e24696a07e2.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;我们扩大了左侧的通道，缩小了分岔路口的大小，同时扩大了上方作为营地的区域。&lt;/p&gt;

&lt;p&gt;最右侧的小道，则保留作为和最终 BOSS 单独战斗的通道。不过这个通道现在非常靠近营地区域，在战斗时会很有可能吸引到上方营地的怪物，因而我们要修改通道，使其纵深更长，使得战斗可以更远离营地一些。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2020/be8d6757-2fde-4a1a-aaa6-55094923b576.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;然后回到最上方，我们要堵住上方的路口，以避免让玩家认为最上方是可以抵达的地方。
&lt;img src="https://img.way2solo.com/photo/2020/6cff9e2b-45fc-4018-a92d-5b0a0eefea30.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;经过一番摆放，我们得到了如下的分布图。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2020/de56cff7-d01a-49e2-8128-aa9038d1e0d7.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;从上方出发，零碎地分布狗头人，直到下方出现分岔路，分岔路的一边是大量狗头人，另一边是少量狗头人。最后来到守卫处。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2020/d7c47c93-54f9-467d-8ede-b400013528f8.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;在守卫处，除了守卫，我还额外放了 2 只普通狗头人，并且这两只狗头人不会掉落任何物品。这么设计的原因，是因为这两只狗头人是纯粹用于增强关尾挑战性的。它们存在的目的不是为了给予玩家奖励，而是为了将游戏难度拉高。&lt;/p&gt;

&lt;p&gt;根据目前的放置的普通狗头人数量来计算，我们可以大概知道玩家可以获得多少药水。
按下 F11，我们可以打开【物体管理器】。
&lt;img src="https://img.way2solo.com/photo/2020/1e9eaa2e-a132-44a1-8213-5516c632f810.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;
我们可以在物体管理器中查看诸多地图相关的信息。
来到【单位】分页，并找到【中立敌对】-【单位】，我们可以查看当前地图上一共放置了多少个单位。
&lt;img src="https://img.way2solo.com/photo/2020/8066697c-8620-4f2d-8309-7c3da4c2193c.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;排斥掉守卫身边不掉落任何物品的狗头人，我们现在有 34 个狗头人会掉落物品。&lt;/p&gt;

&lt;p&gt;如果按照我们的 40%+10%+5% 的概率来计算，整场战斗下来假设 34 个狗头人全部都掉落药水，那么我们的玩家将大约能够获得 34x0.55=18.7 瓶药水。
我们每瓶药水可以恢复 100 点生命值，换言之地图上的补给是 1870 点生命值。
按照先前教程的计算，394 点生命值便可以让我们的勇者在硬碰硬的情况下干掉 2 个狗头人，因而简单地计算，1870 可以让我们的勇者通过硬碰硬的方式干掉 9 只狗头人。
不过后来我们为勇者添加了【重拳】和【王国的力量指环】，因而战斗难度还会进一步下降。
显然，接下来我们要么重新测试勇者可以在携带技能和指环的情况下对抗多少个狗头人，要么直接进行游戏。
前者可以让我们从数值的层面得知大致应该放多少怪物，而后者则可以通过将自己变成游戏玩家，直观地感受关卡的强弱。&lt;/p&gt;

&lt;p&gt;不过，在粗略计算了数值后，我们不希望一关下来遍地都是药剂，因而我们可以在开始测试之前，将数值从 40%+10%+5% 修改为 30%+5%，这样我们大约就只会获得 9 瓶药水，并且大部分在营地里。营地里由于怪物数量众多，因而战斗会更激烈，药水的获取难度也就会更高。在激战中不断战斗并获得回复药剂，我们认为是可以接受的体验。
&lt;img src="https://img.way2solo.com/photo/2020/beb81742-3e34-4f27-8573-2afa85591be9.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;在面对营地的战斗之前玩家可以遭遇很多零碎的怪物，但我们不希望这些怪物全部都掉落生命药剂。生命药剂能够恢复生命值，但不能直接提高战斗力。
因而为了奖励那些选择清缴进入营地之前所有怪物的玩家，我们将左侧一个怪物设置为必定掉落【铁剑】。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2020/922d564f-6279-46a3-868a-fd8949521b3d.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;同样，为了达成这个目的，我们需要修改先前的物品列表，将【低级装备】修改为【必定掉落低级装备】，并调整概率。
&lt;img src="https://img.way2solo.com/photo/2020/4ccb16c6-694f-4f5c-b5d6-07d68328f432.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;
&lt;img src="https://img.way2solo.com/photo/2020/0b4b7158-8032-4544-b308-4d78fa755d8f.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;这样子，玩家就必定会从这个狗头人身上拿到一把能够提升 6 点攻击力的铁剑。&lt;/p&gt;

&lt;p&gt;如此，我们的舞台就初步搭建好了。&lt;/p&gt;</description>
      <author>DreamerQW</author>
      <pubDate>Fri, 25 Dec 2020 18:43:53 +0800</pubDate>
      <link>https://beta.w2solo.com/topics/774</link>
      <guid>https://beta.w2solo.com/topics/774</guid>
    </item>
    <item>
      <title>《从零开始的 RPG 游戏制作教程》第五期：制作物品和技能</title>
      <description>&lt;p&gt;往期回顾&lt;/p&gt;
&lt;h3 id="目录"&gt;&lt;strong&gt;&lt;em&gt;目录&lt;/em&gt;&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://indiehackers.net/topics/673" rel="nofollow" target="_blank" title=""&gt;1. 前言&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://indiehackers.net/topics/675" rel="nofollow" target="_blank" title=""&gt;2. 第一期：制作基础场景&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://indiehackers.net/topics/689" rel="nofollow" target="_blank" title=""&gt;3.第二期：让勇者和怪物登场&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/727" title=""&gt;4.第三期：基础的数值设计&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/745" title=""&gt;5.第四期：从理论的角度简单聊聊关卡&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;接着上一期，现在我们所制作的东西将密切地和关卡相关。&lt;/p&gt;

&lt;p&gt;第五期：制作物品和技能&lt;/p&gt;

&lt;p&gt;王国的力量指环&lt;/p&gt;

&lt;p&gt;基于上一期的清单，让我们先设计 “王国的力量指环”。&lt;/p&gt;

&lt;p&gt;打开物体编辑器，将分页切换到 “物品”。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2020/913108e4-d04a-4dc7-a4fb-f9384536861a.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;在左下角【自定义物品】处，右键点击，新建自定义物品。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2020/fba757f4-6daf-4028-a140-896b02c646d2.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;这里我们选择【巨人力量腰带】作为基础模板，同时将新物品名字设置为【王国的力量指环】。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2020/9ee7d2bb-5ae9-4835-8351-f03002e2fa12.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;然后点击确认，这样我们就获得了一个新的物品。
&lt;img src="https://img.way2solo.com/photo/2020/609fb724-3a69-438a-bb9b-629706629b47.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;在右侧，我们可以修改新创建的物品的名称、描述、图标等等数据。
&lt;img src="https://img.way2solo.com/photo/2020/d73d1fbc-1e33-4db0-9f5b-2802f928dcef.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;经过一番修改，我们现在有了 “王国的力量指环” 这样一个全新的物品。&lt;/p&gt;

&lt;p&gt;如果现在我们进入游戏，王国的力量指环只会增加 6 点力量，因为原来的模板物品（巨人力量腰带）只会增加 6 点力量。
&lt;img src="https://img.way2solo.com/photo/2020/00c6f840-2368-445c-b2de-ffb90a4ef587.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;这里涉及到的是魔兽争霸物品的实现机制。
在魔兽争霸 3 中，一个物品可以拥有多个技能效果，物品本身是不包含任何效果的。
&lt;img src="https://img.way2solo.com/photo/2020/8d32401c-d229-4a89-93f1-738a285adc74.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;比如双击上面的 “技能” 数据，在打开的窗口点击编辑技能，将会看到如下图的技能列表。
&lt;img src="https://img.way2solo.com/photo/2020/afe3f19b-4092-47da-ada4-653b617db902.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;因此如果我们要修改物品的效果，改变其增加的力量值，我们就需要再新创建一个技能，使其能够准确增加我们需要的数值的力量值。
为了实现这一目的，现在我们切换到 “技能” 分页，找到【能提高英雄属性的物品 (+6 力量)】技能。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2020/8b693991-fc66-45ae-bb9a-cc86ca1ada1a.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;注：你可以使用搜索功能来快捷地找到自己需要的数据。
&lt;img src="https://img.way2solo.com/photo/2020/f66426d3-1079-4668-b573-72966f342198.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2020/093da166-ad65-4bf7-a471-2996842b267f.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;此外，除了通过右键 “自定义技能” 来创建新技能以外，你也可以通过复制粘贴的方式来获得新的自定义技能。
&lt;img src="https://img.way2solo.com/photo/2020/fc98e7a0-093d-40ef-bb3b-500aa78c2a76.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;
&lt;img src="https://img.way2solo.com/photo/2020/b8c4e419-9969-40fe-8a09-12657e7c8ecb.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;随后将会出现一个被粘贴出的自定义技能。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2020/91313056-9a00-43a4-90c2-8ab7715a12ad.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;你也可以用先前的方式，在自定义技能处，右键，新建自定义技能。&lt;/p&gt;

&lt;p&gt;然后选择【能提高英雄属性的物品 (+6 力量)】作为模板，创建新技能。
&lt;img src="https://img.way2solo.com/photo/2020/64bf6869-81cd-4d96-83ab-e45feda45602.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;修改新技能的数据 “力量奖励”，从 6 改为 10，同时也可以修改编辑器后缀的【(+6 力量)】为【(+10 力量)】。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2020/6294acec-fae1-414d-aa02-d3a15749fd2c.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;
&lt;img src="https://img.way2solo.com/photo/2020/7d7f53a7-07f8-4599-942c-daf8da39e109.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;回到 “物品” 分页，找到 “王国的力量指环”，编辑器物品的技能列表，删除【能提高英雄属性的物品 (+6 力量)】，替换为【王国的力量指环 (效果)】。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2020/e282ef1c-177b-40e3-861d-0ffa631584fc.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;
&lt;img src="https://img.way2solo.com/photo/2020/ebb3bcdc-aad8-4266-8e0a-57673ba6a8d1.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;回到场景双击克里夫，在弹出的窗口切换分页到【物品栏】，点击 NO. 1。
&lt;img src="https://img.way2solo.com/photo/2020/eef56e9c-6354-4355-abcb-d1938a3373a1.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;找到力量指环后确认，现在进入游戏，力量指环现在会增加 10 点力量了。
&lt;img src="https://img.way2solo.com/photo/2020/9ccedd21-cc7d-4fea-baf5-6f4f4beaf934.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;铁剑、小型生命药剂
按照王国的力量指环的相同逻辑，接下来我们要制作铁剑和小型生命药剂两种物品。
前者是装备，后者是消耗型道具。&lt;/p&gt;

&lt;p&gt;在这里我们假设铁剑的效果是增加 6 点攻击力。
我们可以找到具有相同效果的物品【攻击之爪 +6】，复制粘贴，然后修改它的图标和描述。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2020/a089c173-cb2f-42c9-9554-317cc5e8c933.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;对于小型生命药剂，我们希望使用间隔是 10 秒，使用会回复 100 点生命值。
我们以【生命药水】为模板制作。
&lt;img src="https://img.way2solo.com/photo/2020/5a6006ad-4796-40bd-bd74-fe5c17dd3cfa.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;找到生命药水后，复制粘贴，修改名字。
&lt;img src="https://img.way2solo.com/photo/2020/c73cdc96-d774-46ec-8f83-025845df2359.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;小型生命药剂的生命值恢复效果在【具有医疗效果的物品 (较小的)】技能中被设置。
&lt;img src="https://img.way2solo.com/photo/2020/c4fdfb46-0c7e-4b8a-bf32-d9762c3dfd0e.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;切到技能页面让我们查看它能够恢复多少生命值。
&lt;img src="https://img.way2solo.com/photo/2020/b9e73c26-bd3b-49b3-b348-b9947fcecfde.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;按照先前制作王国的力量指环的逻辑，我们在这里将这个技能复制粘贴，获得一个新的恢复指定数值生命的物品技能。
&lt;img src="https://img.way2solo.com/photo/2020/7d8ba5dc-1fb2-4703-be21-a675d1288e8b.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;进行一番处理，将数值调整为我们需要的 100，然后回到物品页面，将小型生命药剂的技能替换为我们新创建的物品技能。
&lt;img src="https://img.way2solo.com/photo/2020/29566918-be49-4867-a86b-b084ba29dd48.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;再进行一番修改后，我们获得了完整地小型生命药剂。&lt;/p&gt;

&lt;p&gt;此外我们希望玩家使用药剂的时间间隔为 10 秒，我们需要修改物品的【状态 – CD 间隔组】。
在魔兽中，物品使用【CD 间隔组】来共享物品的使用间隔。比如在正常的魔兽中，【生命药水】和【大型生命药水】使用的是相同的 CD 间隔组，意味着无论在游戏中，英雄是使用【生命药水】还是使用【大型生命药水】，一旦英雄使用了其中一个，就必须等待一定时间才能使用任何另一个生命药水。
&lt;img src="https://img.way2solo.com/photo/2020/74757d1e-42c7-44fc-a6ae-af7e26289c64.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2020/422f42a4-256f-4e0d-b1b6-8ab761781ab0.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;目前我们不太考虑 CD 间隔 “组” 的问题，只考虑单个药水的间隔，因此我们双击【CD 间隔组】，找到我们的【小型生命药剂 (+100)】，然后确认。
&lt;img src="https://img.way2solo.com/photo/2020/a3fa1107-d7fe-493e-98ac-9c95d8f5be2c.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;回到技能页面，把【小型生命药剂 (+100)】的【状态 – 魔法施放时间间隔】数据从 20.00 修改为 10.00，我们便获得了一个使用间隔时间为 10 秒的药剂。
&lt;img src="https://img.way2solo.com/photo/2020/1ad1ec89-f4a4-4085-9cc2-7f4fdc5df146.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;至此，我们已经做完了我们需要的 3 个物品：王国的力量指环、铁剑、小型生命药剂。&lt;/p&gt;

&lt;p&gt;设置英雄等级上限
接下来我们要限制英雄的等级上限。&lt;/p&gt;

&lt;p&gt;我们没有办法通过物体编辑器来直接限制英雄的等级上限，要修改上限，需要回到地形编辑器。
在地形编辑器的菜单【高级】中有一个选项名为【游戏平衡性常数】。
&lt;img src="https://img.way2solo.com/photo/2020/1a3a4548-e94f-427a-93da-9c8871d99605.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;点击后会有如下的窗口，这个窗口里定义了许多和游戏平衡性相关的数据，修改这些数据可以对地图的游戏数据细节进行更全面的控制。
&lt;img src="https://img.way2solo.com/photo/2020/546f24cf-0d78-43e7-b14d-c45e0f997b36.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;我们找到【英雄 – 最大等级】。不过直接双击我们会发现无法编辑，这是因为魔兽地图编辑器为了防止制作者意外地修改到这些数据，我们需要先勾选【使用自定义平衡性常数】才能进行修改。
如下图处理后，我们将英雄最大等级修改为 2，然后点击确定保存。
&lt;img src="https://img.way2solo.com/photo/2020/2234b0bb-a534-4832-9025-45f089c16058.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;做了这个修改后，进入游戏，无论击杀多少个怪物，克里夫在本地图内的最高等级都只会是 2 级。
到这里你也许会问，这个地图限制了英雄等级是 2 级，在后续的游戏中我想解锁更高的等级怎么办？这个问题我们先不做解答，在后续讲解【战役编辑器】时，我们会再讲述这个问题如何解决。&lt;/p&gt;

&lt;p&gt;制作技能：重拳&lt;/p&gt;

&lt;p&gt;接下来让我们的 RPG 在可玩性上能够更高一些。
先前我们已经制作出了【克里夫】这么一个勇者角色，但如果我们不希望我们的玩家只能够使用【攻击】指令来普通地和怪物对抗，我们就得考虑增加更多的操作空间。
制作一个可以让玩家主动使用的、具有击晕效果的技能，将能够让我们的玩家在战斗的时候有更多地发挥余地。玩家可以通过对特定的怪物使用技能来迂回地战斗，同时也因此，玩家可以根据自己的操作水平来考虑要不要在自身属性没有那么高的情况下挑战更多的怪物。
技能的设计又是一门大的分支，在现今的游戏行业中，当研发团队规模达到一定程度，团队里甚至会有小组专门负责技能的制作。
不过在那之前，让我们先着手制作【克里夫】的重拳吧。&lt;/p&gt;

&lt;p&gt;我们在这里设定，重拳只能对单个敌人使用，会造成 50 点伤害，并让敌人昏迷 2 秒，使用间隔为 20 秒，消耗魔法值为 0。
这些数值并没有什么依据，只是大致地根据目前怪物的生命值、杀死一个怪物所需的时间来大概估算的数值。无论如何，我们可以确定这技能能够一定程度地降低战斗的难度。但为了避免难度降低得过于严重，我们将使用间隔设置为 20 秒。&lt;/p&gt;

&lt;p&gt;在魔兽争霸 3 中，能够造成昏迷效果同时又能够造成伤害的技能，是人族山丘之王的【风暴之锤】。
在技能分页中找到它，然后复制粘贴。
&lt;img src="https://img.way2solo.com/photo/2020/1e1d96e7-26ae-4cd0-956e-43467629cb90.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;一个技能往往有很多数据，但挨个介绍会让教程显得过于冗长，目前我们暂时不对所有数据进行介绍，只根据我们的需要来继续修改。
目前我们只在制作第一关，因此先把重拳的技能等级限制为 1 级，通过修改【状态 – 技能】为 1 来实现。
&lt;img src="https://img.way2solo.com/photo/2020/3150ecb4-f5f0-4882-9811-6eed4df9d9fd.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;当英雄使用风暴之锤时，按照风暴之锤的设定，英雄会播放 spell,throw（施法、投掷）动画。我们不希望克里夫在使用【重拳】时播放投掷动画，因此将【显示 – 效果 – 施法动作】修改为 attack ，意为 “攻击”。
&lt;img src="https://img.way2solo.com/photo/2020/28b7c6a5-1c61-4b4f-84f4-60e2fde26fe7.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;
&lt;img src="https://img.way2solo.com/photo/2020/eea8869c-f130-450a-ba01-3094eac75206.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;通过修改【状态 – 魔法施放时间间隔】来修改技能的使用 CD，将其从原有的 9.00 修改为 20.00。
&lt;img src="https://img.way2solo.com/photo/2020/03e25dd2-388e-4202-87d0-c7ef39192bf4.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;同时取消该技能对魔法值的消耗，通过修改【状态 – 魔法消耗】来实现。
&lt;img src="https://img.way2solo.com/photo/2020/6a771309-5f64-4f83-a59e-4cd53cbe75bd.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;在【风暴之锤】技能中，数据【状态 – 持续时间 – 普通】对应的是命中普通单位时造成的昏迷时间，【状态 – 持续时间 – 英雄】则对应命中英雄单位时造成的昏迷时间。
目前我们不对普通单位和英雄单位做区分，只要重拳击中敌人，就必然造成 2 秒昏迷，因此将这两项数据均改为 2.00。
&lt;img src="https://img.way2solo.com/photo/2020/2b787ae1-d2d7-45cc-980f-2fb6af26e9bb.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;同时，我们不希望克里夫能够一击重拳打中隔了好一段距离的敌人，因此对照克里夫自身的攻击范围（100），修改重拳技能的射程，对应数据【状态 – 施法距离】。
&lt;img src="https://img.way2solo.com/photo/2020/3943fc2e-2616-46b1-8157-d18426727c4b.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;另外，重拳击中空中的敌人也不是我们想要的，因此需要限制本技能不能击中空中单位，在【状态 – 目标允许】中取消勾选 “空中”。
&lt;img src="https://img.way2solo.com/photo/2020/732d177d-17ec-4b8e-ae49-e03232131e38.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2020/6cdb9ed5-422b-4684-b6c5-531d3fad3105.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2020/2cbdecd0-0c24-4990-a0ae-9504e8dce083.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;而造成伤害值则直接修改【数据 – 伤害】。
&lt;img src="https://img.way2solo.com/photo/2020/6fda661b-25af-47eb-9238-b708363bafd4.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;我们不希望克里夫在等级 1 时就习得这个技能，因此我们设置该技能的最低等级要求为 2 级，通过修改【状态 – 等级要求】来实现。
&lt;img src="https://img.way2solo.com/photo/2020/9b71c203-fa4d-4c63-b35f-dce14efa26e1.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;好了，我们已经设置了所有必要的数据。
对文本描述和图标再做修改之后，我们就得到了基于【风暴之锤】修改而成的新的技能：【重拳】。
&lt;img src="https://img.way2solo.com/photo/2020/2a601b8b-4935-421b-be42-4296a29f286f.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;让我们转到【单位】页面，找到【平凡的勇者】，修改其【技能 – 英雄】数据栏，添加我们的技能【重拳】。
&lt;img src="https://img.way2solo.com/photo/2020/66508e5c-e6e1-45f7-af3c-06c2fe43530f.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2020/06cdd84f-a0ac-46fd-ab80-cbad9b704f1b.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;保存，进入游戏！&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2020/ca080cc1-7cf7-4caa-8cde-a256b10f674c.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;好了，现在我们有了一个能够变得强大的克里夫了！
下期再见！&lt;/p&gt;</description>
      <author>DreamerQW</author>
      <pubDate>Tue, 22 Dec 2020 19:54:04 +0800</pubDate>
      <link>https://beta.w2solo.com/topics/767</link>
      <guid>https://beta.w2solo.com/topics/767</guid>
    </item>
    <item>
      <title>《从零开始的 RPG 游戏制作教程》第四期：从理论的角度简单聊聊关卡</title>
      <description>&lt;p&gt;往期回顾&lt;/p&gt;
&lt;h3 id="目录"&gt;&lt;strong&gt;&lt;em&gt;目录&lt;/em&gt;&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://indiehackers.net/topics/673" rel="nofollow" target="_blank" title=""&gt;1. 前言&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://indiehackers.net/topics/675" rel="nofollow" target="_blank" title=""&gt;2. 第一期：制作基础场景&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://indiehackers.net/topics/689" rel="nofollow" target="_blank" title=""&gt;3.第二期：让勇者和怪物登场&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w2solo.com/topics/727" title=""&gt;4.第三期：基础的数值设计&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;到目前为止，我们已经接触了如何制作简单的游戏场景，如何放置装饰物、单位，如何修改单位属性，并且通过简单的数学计算来获得我们需要的强度，从而使得我们能够知道放置多少个怪物、在哪里放置怪物。
在本期，我们会从纯理论的角度聊聊我们的第一关，以让你能够大概了解后续更新中我们要讲述的内容，以及这些内容围绕的中心点。&lt;/p&gt;

&lt;p&gt;第四期：从理论的角度简单聊聊关卡&lt;/p&gt;

&lt;p&gt;一个关卡拥有明确的挑战目标、完成条件、胜利和失败逻辑。
关卡可以简单到只要将一个角色运送到指定地点，也可以困难到将一个角色运送到指定地点。&lt;/p&gt;

&lt;p&gt;这两者有什么区别呢？
第一种：让克里夫出村。
第二种：让克里夫突破怪物的层层包围，利用村庄有限的资源，在不断的战斗中逐个击破敌人，然后直达敌人的腹地，击杀本地的敌人领袖，得到边境出口的钥匙，然后击败守卫出口的门卫，用钥匙打开出口离开。&lt;/p&gt;

&lt;p&gt;通过对 “过程” 的拓展，我们获得了一个复杂的关卡。尽管我们可以把最终目的用 “让克里夫出村” 这样一句简单的话语来描述，但实际上我们必须考虑完成 “出村” 这一行为需要做哪些具体的事情，并且不能忽略达成这些小步骤需要的准备、消耗。&lt;/p&gt;

&lt;p&gt;一个显而易见的事实是，如果我们让克里夫在离开出生点后面对的第一个怪物就是强大的 boss。如果玩家没有任何一丁点胜算（即便是让那些天赋极佳或经验丰厚的精英玩家来玩），那我们的玩家一定会跳起来大骂这游戏难得要死，根本玩不下去。
如果 “玩不下去” 不是我们刻意传达给玩家的印象，那这种关卡实际上就是我们应该尽量避免的，因为它不符合我们想要达到的目的，而设计的目的正是让玩家感受到到我们希望他们感受到到的体验。
尽管现在我们有很多刻意传达 “难得要死” 感受的游戏（如《黑暗之魂》、《只狼》、《茶杯头》、《蔚蓝》、……），但实际上玩家总会在不断死亡中越来越熟练如何操作自己的角色，以及越来越习惯 boss 的技能机制，并且学会如何躲闪。如果这些游戏真的难到让玩家们看不到一丁点胜利的希望，那玩家们恐怕无法欣赏这类游戏的魅力。&lt;/p&gt;

&lt;p&gt;因而通常情况下我们设计的关卡，需要确保我们的玩家能够把游戏玩下去。不过在那之前，我们需要明确一个概念，“目标群体”。设计一个让所有人都喜欢的游戏是极其艰巨的，而实际上就算真的这么做了，人们往往也不一定真的会去玩这款游戏（典型的，比如他们忙于奔波时，他们没有功夫停下来花费大量时间玩游戏，或者即便有些人会喜欢这游戏，但却不知道如何使用电脑下载）。
因此我们需要限定游戏的目标群体。我们的游戏需要玩家拥有视力，有双手，能够操作鼠标键盘。我们的玩家最好能够阅读文字，否则他有可能性会不知道我们要做什么。——以及，至少目前的世界，我们的玩家极大概率需要是一名人类。&lt;/p&gt;

&lt;p&gt;好了，回到正文，本期我们要制作整个 RPG 游戏的第一关。
我们将使用先前已经设计好的怪物和角色，在此基础上追加奖励机制，然后通过简单的 “触发器” 来实现关卡内的逻辑。&lt;/p&gt;

&lt;p&gt;着手之前，我们得搞清楚第一关要干什么。&lt;/p&gt;

&lt;p&gt;我们可以假设第一关是为了让玩家学会如何使用魔兽争霸进行游戏而制作的，因而这一关要教会玩家进行基本的移动操作。然而如果我们真的这么做，基于我们现在已经讲述的知识来制作这样的关卡会显得较为困难。为了教学目的，我们忽略教程关的制作，我们先直接基于我们的 RPG 故事来进行创作第一关。&lt;/p&gt;

&lt;p&gt;我们先前（第二期）初步交代了我们 RPG 的基础背景，地下城恶魔统治了地面村落，并试图侵占更多村落，从而占领世界统治权。这场战争故事里，玩家扮演自告奋勇的勇者克里夫，并以克里夫的角度来体验游戏。
在这个人人自危的乱世，反抗者所在的村庄将会被集体屠戮。我们预设克里夫所在的村庄民风剽悍，每一位村人都是在战斗中磨炼出来的天生的战士。这个村庄已经为王国提供了大量强大的士兵。因而修改我们的故事，克里夫并非带着全村人的希望单独前进，而是他自己就是村长。在本次故事中，他将负责联络城市，要求提供武装，并且组建出一支凝聚力极强的精英游击队，对恶魔发动反抗的号角。同时，克里夫也不再是无名的勇者，而是退役的老将领。&lt;/p&gt;

&lt;p&gt;不过，一下子把这些设定全部塞给玩家不是什么好主意。如果想要让游戏有趣，我们得在故事发展的过程中一点一点揭开谜底，就像刮奖励券一样。
游戏设计过程中不能忽略对玩家 “期待值” 的考虑。适时引导玩家的 “期待”，并给予合适的反馈，才能够吸引玩家持续游玩下去。
一个游戏的关卡如果没有解锁，那这个关卡就是奖励。如果它已经解锁了，那它就反而成为了普通的挑战，没有攻略的必要性，因为后续的关卡已经解锁了，所以只要觉得无聊，直接跳过就行了。&lt;/p&gt;

&lt;p&gt;第一关，作为退役将领的克里夫带着自己的宝物 “王国的力量指环” 前进。克里夫将穿过现今布满魔物的树林，突破狗头人的防线，从而能亲自将口信带到王国。
我们要让克里夫在突破防线的过程中逐渐找回自己的力量变得强大，但树林的敌人只能允许他最高到等级 2。
同时，通过战斗，我们要让克里夫能够掠夺魔物的装备，从而武装他自己，然后对抗更强大的敌人。
因此在接下来，我们需要制作第一关的场景，放置怪物，并且设置这些怪物掉落什么物品、击杀后奖励多少经验值。此外我们还要准备特别的防线守卫，这些守卫相较普通的魔物更强，克里夫必须通过得到的装备和药水来与之周旋才能成功突破防线。
除此以外，我们要设置关卡的胜利和失败条件。
玩家必须保证克里夫不死亡，同时玩家必须击败防线守卫后，将钥匙携带到防线大门处以打开大门。
为了让战斗更有趣，我们还准备为克里夫添加英雄技能，技能只有在克里夫的等级到达 2 时才能获得。&lt;/p&gt;

&lt;p&gt;换言之，我们需要做这些事情：
将克里夫的英雄等级上限设置为等级 2；
创建物品：“王国的力量指环”；
创建物品：“铁剑”、“小型生命药剂”；
创建技能：“重拳”，并添加给克里夫；
设计一个比普通的狗头人强大的狗头守卫；
基于克里夫的强度放置怪物，分布到场景中；
设置关卡中怪物的掉落物；
制作一个大门，当克里夫携带钥匙来到大门前时，能够打开大门；
当玩家抵达防线出口时，游戏胜利；
当克里夫死亡时，游戏失败；
创建一个主线任务在任务栏，用于提醒。&lt;/p&gt;

&lt;p&gt;很显然，如果想要真的完完全全地把这些事情全部做完，我们还需要把知识进一步细化讲述。像如何制作物品、如何设置怪物掉落品、如何实现打开大门等功能，都是我们先前没有讲过的。
出于篇幅问题，这些细分的知识，让我们在后续的更新中逐个介绍。&lt;/p&gt;</description>
      <author>DreamerQW</author>
      <pubDate>Tue, 15 Dec 2020 14:07:30 +0800</pubDate>
      <link>https://beta.w2solo.com/topics/745</link>
      <guid>https://beta.w2solo.com/topics/745</guid>
    </item>
    <item>
      <title>《从零开始的 RPG 游戏制作教程》第三期：基础的数值设计</title>
      <description>&lt;p&gt;往期回顾&lt;/p&gt;
&lt;h3 id="目录"&gt;&lt;strong&gt;&lt;em&gt;目录&lt;/em&gt;&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://indiehackers.net/topics/673" rel="nofollow" target="_blank" title=""&gt;1. 前言&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://indiehackers.net/topics/675" rel="nofollow" target="_blank" title=""&gt;2. 第一期：制作基础场景&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://indiehackers.net/topics/689" rel="nofollow" target="_blank" title=""&gt;3.第二期：让勇者和怪物登场&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;上期回顾
在【第二期：让勇者和怪物登场】中，我们已经制作了一个自定义的勇者克里夫。
&lt;img src="https://img.way2solo.com/photo/2020/87ab6dee-0a03-4442-a583-e429286f2a3c.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;很显然，相比我们先前所放置的怪物，我们的主角实在是太弱了。
&lt;img src="https://img.way2solo.com/photo/2020/f5a88c77-0419-44bd-98c9-bbe0f6613e8f.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;
&lt;img src="https://img.way2solo.com/photo/2020/027f07dd-fd54-4ea8-aab2-8c23b031bf9d.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;
如果我们不希望克里夫在走出村子的时候什么都没做就被杀死，要么我们让怪物变弱，要么让克里夫带上全村最好的剑和最好的盾出发。
解决办法有很多，不过本期，让我们先从【数值】的角度下功夫。&lt;/p&gt;

&lt;p&gt;第三期：基础的数值设计&lt;/p&gt;

&lt;p&gt;1+1=2，这是我们对数学的第一个印象。最初我们从个位数开始学习计算，然后到十位数，到百位数。从加减法开始，到乘除法，然后引入分数和方程，以及更远。
一个能够战斗的 RPG 游戏是基于数学的，怪物的移动速度、攻击频率、攻击力、护甲范围、伤害公式、不同类型护甲的伤害规则等等。
&lt;img src="https://img.way2solo.com/photo/2020/bd81e30d-2986-4e94-a52c-b93648c82671.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;数值设计是游戏圈内常谈的问题，要么用于确保新手前期能够放心进行游戏而不被轻易击杀，要么确保后期玩家可以爽快释放技能大杀四方。当然，如果人们想，他们也可以通过修改公式来实现无论玩家强大到什么程度，也仍然会被各种活动 BOSS 虐待。
无论是宏观的账号成长线、长线的角色等级成长线，还是微观一些的单局类游戏的单位制造速度、英雄的升级速度，或是更微观一些的，某场具体的 1 级角色对抗 1 级低等小怪的战斗速度，或对抗 1 级稀有怪物的战斗速度，以及怪物死亡后的掉落率，这些都是数值。
&lt;img src="https://img.way2solo.com/photo/2020/62762152-9b29-4e2c-acfd-7606d95dded1.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;数值本身只是工具，这工具会一定程度地影响玩家的【体验】。用来做什么，是让游戏更好玩还是让环境更恶劣，是激发玩家的快乐还是让玩家陷入焦虑和疯狂，完全取决于设计者、决策者。&lt;/p&gt;

&lt;p&gt;让我们回归到教程。
我们希望勇者不要刚踏出村子就被一大堆怪物直接贴脸打死，这样我们的玩家才能够走出村子，能够通过击杀怪物来获得经验值，或者获得一些怪物身上的宝物，从而展开旅途。&lt;/p&gt;

&lt;p&gt;在上一期中，我们放置了一堆怪物到场景里，这些怪物的数值全部是由《魔兽争霸 3》自身提供的。如果我们直接使用这些怪物的数值——要么我们能提供一个符合魔兽争霸 3 数值体系的主角以及相关的数值设计，要么我们由于使用了强于或弱于这套体系的数值，使得我们的主角能够轻松虐待这些怪物，或者被这些怪物轻松虐待。&lt;/p&gt;

&lt;p&gt;在本期教程中，让我们简单地直接基于《魔兽争霸 3》的数值体系，进行数值的实验。&lt;/p&gt;

&lt;p&gt;为了实验，我们把勇者放在一片空地。
&lt;img src="https://img.way2solo.com/photo/2020/2923c30f-667c-4d89-8141-81c58ff3757c.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;然后假设村子外主要的敌人是狗头人，我们将勇者和狗头人单独放在一起。
&lt;img src="https://img.way2solo.com/photo/2020/7b2c12e9-ed40-45dc-b9e4-5a679f6e92c6.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;保存后进入游戏，我们可以通过单独让勇者面对一个单独的怪物，来计算出勇者是否能够在理想情况下击败怪物，在这过程中会受到多少伤害，击杀怪物需要多少时间。
&lt;img src="https://img.way2solo.com/photo/2020/c1027ca2-af5d-4b73-a780-0f87f12c8a17.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;这种实验的数据，是我们进行数值计算的基础。&lt;/p&gt;

&lt;p&gt;另外，在魔兽争霸 3 中，你可以通过在游戏里按下 F10 打开游戏菜单后进入【选项】、【游戏性】，在游戏性设置中勾选【是否始终显示生命值条】来打开生命条，便于观察血量。
&lt;img src="https://img.way2solo.com/photo/2020/b3956700-bd5b-447b-bf08-bf74f5faa7a2.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;
&lt;img src="https://img.way2solo.com/photo/2020/b89ae25b-f094-4443-b0b5-2da0697890d5.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;目前来看，等级 1 的勇者想要击败一个狗头人还是绰绰有余的。
&lt;img src="https://img.way2solo.com/photo/2020/2a5246a7-2da0-46f1-a15b-86a0ab8d7577.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;在受到一个狗头人的持续攻击时，勇者能够击杀它，但自身也会损失近一半的血量。
因此，我们可以通过理论推测勇者对抗 2 只狗头人在不操作情况下的战斗结果。
假设勇者单独杀死一个狗头人的战斗时间为 t，狗头人的攻击力为 a。
我们把【两只狗头人】算作一个单独的联合体。
当【两只狗头人】攻击时，则敌人总攻击力为 2a。如果同样经过战斗时间 t，勇者会濒临死亡。
因此推测，在玩家不操作的情况下，如果勇者同时面临 2 只狗头人，则勇者能够在濒临死亡时杀死其中 1 只狗头人。&lt;/p&gt;

&lt;p&gt;因而如果我们想要勇者可以活着逃跑，就要确保勇者杀死 1 只狗头人后逃跑时不被追赶上致死，因而勇者的移动速度应当大于或等于狗头人的移动速度。&lt;/p&gt;

&lt;p&gt;在物体编辑器中我们可以查看勇者和狗头人的移动速度。
&lt;img src="https://img.way2solo.com/photo/2020/731f398e-d7f4-4200-8db4-21cfdae7b6f8.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;
&lt;img src="https://img.way2solo.com/photo/2020/2c751baf-000b-4796-bafa-a09ea1a6453a.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;目前他们的移动速度相等，满足了濒死逃生的条件。&lt;/p&gt;

&lt;p&gt;因此让我们再放一只狗头人到场景里，开始实验。
&lt;img src="https://img.way2solo.com/photo/2020/06f5ded1-8af5-4d99-8c39-84df0f891ac7.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;
&lt;img src="https://img.way2solo.com/photo/2020/0ce21c23-74fa-4e2b-84e2-69ebe9cfa87d.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;然后勇者被打死了，这说明数值结果不正确，没有达成我们想要的结果。
不过我们观察到在勇者死之前，其中一只狗头人也几乎快死亡了，因此大体数值是符合我们的推测的。&lt;/p&gt;

&lt;p&gt;狗头人的攻击力为 10-11，查看物编可知道其攻击间隔为 1.35 秒。
 &lt;img src="https://img.way2solo.com/photo/2020/c29ed887-b535-4ac6-8c55-0c63ade02c83.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;
&lt;img src="https://img.way2solo.com/photo/2020/759e5930-9025-4660-a6c5-cce7cd09f95c.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;同时我们的勇者攻击间隔为 2.2 秒。
&lt;img src="https://img.way2solo.com/photo/2020/aac199f6-e581-4528-bec8-3325ab077d13.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;根据狗头人残存的血量，我们可以粗略的认为，只要勇者能够再站 3 秒，他就能给出最后一刀，成功杀死狗头人并开始跑路。
而这意味着我们要勇者能够再承受至少 2 轮来自 2 只狗头人的合击。
2 轮狗头人攻击的伤害为 20-22，两只则为 40-44，在忽略勇者【护甲】对狗头人伤害的削减的情况下，我们需要增加 44 点生命值，勇者就可以再顶 2 轮。
让我们试试。&lt;/p&gt;

&lt;p&gt;找到勇者的数据，然后修改下列数据：
&lt;img src="https://img.way2solo.com/photo/2020/ade925d9-0d9c-4df8-ba99-cb305be46118.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;
&lt;img src="https://img.way2solo.com/photo/2020/f17e9a34-475f-4bf3-96ed-b825b280e8d1.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;保存，进入游戏。
&lt;img src="https://img.way2solo.com/photo/2020/22ac84b0-3362-4a01-b8d2-59aa8d1cd85f.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;测试结果符合预期。&lt;/p&gt;

&lt;p&gt;我们可以粗略地推测：
勇者可以轻易杀死 1 只落单的狗头人；
勇者可以在遭遇 2 只狗头人时杀死其中一个并跑路；
勇者可以通过走位、利用地形等战斗技巧使得自己在面对 2 只狗头人时不落下风，甚至把 2 只狗头人都杀死。
如果我们给予勇者生命药水，那他可以结合上述技巧杀死 3 只抱团的狗头人。
当勇者在开阔地带对抗超过 3 只狗头人时，可能会有大麻烦。&lt;/p&gt;

&lt;p&gt;显然，推论和实验这些数值并没有花费我们太多时间，同时我们也没有使用什么特别复杂精妙的数学公式，我们只是做了简单的乘法、加减法，然后把它们交给游戏去演算。
我们现在可以对数值设计有一个基础认知，即数值设计并不是什么特别玄妙的东西，它仍然是一种设计，用于解决特定的问题。&lt;/p&gt;

&lt;p&gt;我们现在有了狗头人的放置数量和其可能对玩家造成的影响的认知。基于我们的实验结果，我们就可以放心地在野外放置狗头人了。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/2020/917ea18c-46d9-4855-a029-ab607973fab0.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;让我们对先前的场景进行修改。删除掉先前的所有怪物，然后按照我们刚才得到的数值结果，将修改过数值的狗头人放置到场景上。&lt;/p&gt;

&lt;p&gt;观察我们的场景，显然村庄是有卫兵驻守的。因此我们可以推测，玩家一开始可以将狗头人引诱到村子里，通过依靠卫兵的力量来进行最初的战斗。随后当玩家选择向左边的道路进发时，他会挑战逐渐变强的狗头人群，而向右时，战斗稍微简单一些，但会更多地需要他采用引诱的方式，逐个击破这些零散的狗头人。
——在完成了怪物的数值设定后，我们就能展开基本的关卡设计了。&lt;/p&gt;

&lt;p&gt;在下一期，我们将继续介绍基本的关卡设计。&lt;/p&gt;</description>
      <author>DreamerQW</author>
      <pubDate>Tue, 08 Dec 2020 17:14:58 +0800</pubDate>
      <link>https://beta.w2solo.com/topics/727</link>
      <guid>https://beta.w2solo.com/topics/727</guid>
    </item>
    <item>
      <title>《从零开始的 RPG 游戏制作教程》第二期：让勇者和怪物登场</title>
      <description>&lt;h3 id="目录"&gt;&lt;strong&gt;&lt;em&gt;目录&lt;/em&gt;&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://indiehackers.net/topics/673" rel="nofollow" target="_blank" title=""&gt;1. 前言&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://indiehackers.net/topics/675" rel="nofollow" target="_blank" title=""&gt;2. 第一期：制作基础场景&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;在【第一期：制作基础场景】中，我们教学了如何下载魔兽地图编辑器，并制作了一个非常基础的小村子场景。
本期我们会简单地在场景中放入魔兽争霸 3 自带的英雄，使得我们的玩家可以控制一个角色在游戏中活动。同时我们要在游戏内增加一些怪物，使得我们的玩家可以控制角色能与它们战斗。
然后，我们会通过数据编辑器来自定义一个符合我们故事设定的主角，用于让其符合我们想要的世界背景，而非拘泥于魔兽争霸 3 原本的故事。&lt;/p&gt;
&lt;h3 id="第二期：让勇者和怪物登场"&gt;&lt;strong&gt;第二期：让勇者和怪物登场&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;第一节：在场景中放置魔兽自带的英雄和怪物&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;重新打开我们第一期的地图。
&lt;img src="/uploads/photo/2020/18d21462-8af8-4381-8509-3385b6f5f241.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;本期我们要增加玩家英雄和敌对的怪物，但我们不希望玩家可以直接控制我们村庄的各个 NPC。
要解决这个问题，我们需要在【情节】中对玩家阵营进行调整。&lt;/p&gt;

&lt;p&gt;&lt;img src="/uploads/photo/2020/61486668-427e-42b9-bb90-280a6995f440.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;点击【玩家设置】，我们来到了一个新的面板。
&lt;img src="/uploads/photo/2020/c4c21e57-90ff-4a1b-8e29-324b0e588e7f.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;在这个游戏中，我们需要一个【敌对】玩家，一个【村庄】玩家，一个【用户】。
我们把 #1 设置为用户， #2 设置为村庄， #3 设置为敌人。
但同时，我们还需要让用户和村庄两者是结盟的，当敌人入侵的时候，除了用户会攻击敌人，村庄也会攻击敌人。
为此，我们需要在【玩家】页面设置玩家控制者，并在【队伍】页面创建 2 个阵营，实现用户和村庄的结盟，以及和敌人的敌对关系。&lt;/p&gt;

&lt;p&gt;&lt;img src="/uploads/photo/2020/69631dab-6f44-4989-9791-c7af8c7ffec0.png!large" title="" alt=""&gt;
&lt;img src="/uploads/photo/2020/355cdab4-1a70-4374-bcf9-9f9c3bdc5271.png!large" title="" alt=""&gt;
完成上述设置后，点击【确定】。&lt;/p&gt;

&lt;p&gt;回到场景，由于先前我们在放置单位时没有关注这些单位的所属，现在为了区分接下来用户操作的单位和村庄单位，我们需要把先前放置的所有单位设置其所属玩家为玩家 2，即村庄。
&lt;img src="/uploads/photo/2020/89b4d7fd-aac8-4ff8-b993-cc6995ebf51d.png!large" title="" alt=""&gt;
按下快捷键 U 打开【单位面板】后，按空格打开【选择刷子】，然后左键拖动框选我们的单位，随后按下【回车键】。
&lt;img src="/uploads/photo/2020/99ac23c6-8d28-4205-94e4-a693b56ffe22.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;我们可以看到选中的所有单位的属性面板，在【玩家】栏，选择【村庄（蓝色）】。
&lt;img src="/uploads/photo/2020/e8d95da8-51c0-4d8e-b083-b07a5ca594ce.png!large" title="" alt=""&gt; &lt;/p&gt;

&lt;p&gt;得到结果如下图，然后点击确定。&lt;/p&gt;

&lt;p&gt;&lt;img src="/uploads/photo/2020/aa131ef1-ca6e-4cf9-8456-1e7d0f783c53.png!large" title="" alt=""&gt;
&lt;img src="/uploads/photo/2020/b78f9e6e-088b-4936-8d4c-d17c2e30a51e.png!large" title="" alt=""&gt;
随后在单位面板，确认其中的玩家栏指向【勇者（红色）】，然后随意找到一个英雄，放置到场景上。&lt;/p&gt;

&lt;p&gt;&lt;img src="/uploads/photo/2020/2c2b295e-f81b-40a3-a8f8-c7ed9280d49f.png!large" title="" alt=""&gt;
&lt;img src="/uploads/photo/2020/d376f603-4302-41d7-853a-81f8d8c9a885.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;在这里，我选择了【山丘之王】作为用户操控的角色。
&lt;img src="/uploads/photo/2020/96bf05e4-6956-4cba-9fd7-fb5de1fb94b1.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;按下快捷键 Ctrl+S 来保存地图（或者通过【文件】-【保存地图】来保存）。
&lt;img src="/uploads/photo/2020/7758aae7-cef9-4d4e-a788-5dba76c706f7.png!large" title="" alt=""&gt; &lt;/p&gt;

&lt;p&gt;由于我们新增了 2 个玩家，但没有设置其开始点，在保存时会弹出如下对话框：
&lt;img src="/uploads/photo/2020/fc58ddad-6797-49a7-add1-ae36e8953f2c.png!large" title="" alt=""&gt; &lt;/p&gt;

&lt;p&gt;点击【是】，编辑器会自动放置缺失的开始点。&lt;/p&gt;

&lt;p&gt;随后，点击测试地图按钮。
&lt;img src="/uploads/photo/2020/f01c4491-3789-467f-8f38-419356d679b0.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;我们可以进入游戏来体验我们制作的游戏世界了。&lt;/p&gt;

&lt;p&gt;由于玩家 1 的开始点我们放在了村子外，所以在进入游戏后，镜头默认出现在了村子外。
&lt;img src="/uploads/photo/2020/71010337-e212-4f0a-ac94-f17ac13bb38f.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;拖动镜头到闪着白光的地方，或者双击 F1，选中单位【山丘之王】。
随后我们可以按照《魔兽争霸 3》的基础操作方式来控制单位——右键移动，按下攻击按钮指定绵羊可以攻击绵羊等等。&lt;/p&gt;

&lt;p&gt;&lt;img src="/uploads/photo/2020/1eee5abd-2b6f-4792-bc53-cbbae867be1a.png!large" title="" alt=""&gt;
&lt;img src="/uploads/photo/2020/7db90cad-2db3-4836-8cf8-16fb7876ad0f.png!large" title="" alt=""&gt;
&lt;img src="/uploads/photo/2020/4ef36536-b1dc-4ea5-a529-4e45e73489b0.png!large" title="" alt=""&gt;
&lt;img src="/uploads/photo/2020/c67b0545-5fd3-4183-af66-f34ba08761b4.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;继续向左，我们就可以来到村子的边缘。
&lt;img src="/uploads/photo/2020/9815e34b-f2f2-4e3d-92a1-5a29ef51607d.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;不过这里现在什么东西都没有，我们按下 Alt+F4 退出游戏（或通过【菜单】【结束游戏】【退出程序】来退出游戏）。
&lt;img src="/uploads/photo/2020/4a0075aa-b858-4bad-b57e-5b2ae83d1f5c.png!large" title="" alt=""&gt;
&lt;img src="/uploads/photo/2020/aeccbfcc-1c96-46be-a53d-f0a0f0cc7b82.png!large" title="" alt=""&gt;
&lt;img src="/uploads/photo/2020/6853f6f8-5db7-41ca-a382-d1d6be714cc6.png!large" title="" alt=""&gt;
&lt;img src="/uploads/photo/2020/0a8a67a8-ca0e-4028-a1d2-c0a9a570a2cd.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;回到地图编辑器，打开单位面板，将玩家栏修改为【中立敌对】。&lt;/p&gt;

&lt;p&gt;&lt;img src="/uploads/photo/2020/bf060171-efe4-4986-820e-c9ce174064d9.png!large" title="" alt=""&gt;  &lt;/p&gt;

&lt;p&gt;然后我们可以看到很多内置的怪物。&lt;/p&gt;

&lt;p&gt;&lt;img src="/uploads/photo/2020/d29f35ff-7836-434c-9605-0f57cf05bbfc.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;随意选择一些低等级的怪物，放在村子外面。
&lt;img src="/uploads/photo/2020/fdb2cd15-85e9-443d-8e79-358224080ddb.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;此外，我们把红色玩家的开始点移动到玩家英雄的位置，这样在进入游戏后画面可以直接从山丘之王的位置开始。&lt;/p&gt;

&lt;p&gt;&lt;img src="/uploads/photo/2020/0d1b1673-66bd-4049-ad36-7ce17e298a6a.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;为了让野外不至于太寒碜，我们把野外的场景再丰富丰富。
&lt;img src="/uploads/photo/2020/5799df6e-02b8-4f6e-933c-1765b294f2b0.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;现在我们有了一个可以进行基础游玩的场景了。
保存，启动测试，与怪物战斗。&lt;/p&gt;

&lt;p&gt;盟友会协助我们战斗：&lt;/p&gt;

&lt;p&gt;&lt;img src="/uploads/photo/2020/9b8935b6-72db-40ba-bd14-1afe804c7f4f.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;我们也可以自行去野外战斗：
&lt;img src="/uploads/photo/2020/1a5de95b-12f8-4de9-bfc3-a6dffae56a58.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;第二节：自定义角色&lt;/p&gt;

&lt;p&gt;如果我们要做的游戏不是另一个魔兽争霸故事，那我们就得有符合我们自己故事的角色。
在第一节我们教学了如何将魔兽争霸自带的英雄和怪物放置到场景上，接下来我们要讲如何创建我们自己设计的英雄和怪物。&lt;/p&gt;

&lt;p&gt;在魔兽地图编辑器中，所有游戏内的单位数据，都是通过【物体编辑器】中的【单位】页面来管理的。&lt;/p&gt;

&lt;p&gt;&lt;img src="/uploads/photo/2020/93120d71-6f87-4835-b794-7e69304378c7.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="/uploads/photo/2020/7ccaa4cd-4b74-4f86-9941-9283ce8cec23.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;每一个在场景上放置的单位，它们都能够在这里找到数据原型。
数据编辑器可以对单位进行全方位的编辑、设计，影响单位的移动方式、视觉效果、战斗力、持有的技能、等等。&lt;/p&gt;

&lt;p&gt;&lt;img src="/uploads/photo/2020/a0d9c080-f1b2-4329-9bfc-99d770c54010.png!large" title="" alt=""&gt;
&lt;img src="/uploads/photo/2020/a7d52e2e-d11b-40b3-a42a-57d52167807b.png!large" title="" alt=""&gt;
&lt;img src="/uploads/photo/2020/8c7680e7-c702-4bef-bb30-7bd423033c14.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;通过对这些数据原型进行修改，我们可以编辑魔兽争霸自带所有的单位，影响游戏的战斗体验。
典型的，我们可以修改单位的攻击力、护甲、生命值、移动速度，来直接影响特定单位类型的强度。
如果我们想要改变单位的样貌，就找到单位的模型数据，双击并修改它。&lt;/p&gt;

&lt;p&gt;&lt;img src="/uploads/photo/2020/f9f12012-21d0-4518-ac7f-137d7e6688c5.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;（通过这种方式，我们可以将他人制作或者自己制作的模型，导入到项目中，并放入游戏内使用，我们会在未来的教程中说明如何操作。）&lt;/p&gt;

&lt;p&gt;在魔兽争霸 3 的战役故事中有许多英雄，玩家往往也需要操作这些英雄来战斗。但假设我们的 RPG 游戏讲述的是一个地下城恶魔统治了地面村落，并试图侵入其它村落来占领世界统治权的战争故事，并且我们希望玩家扮演一个村庄里自告奋勇的勇者，使我们的玩家从勇者的角度来体验整个故事的剧情发展，那么我们需要设计一个【勇者】单位，来由玩家控制。
接下来我们制作它。&lt;/p&gt;

&lt;p&gt;将鼠标移动到左侧列表的【自定义单位】处，右键单击，在弹出的列表中点击【新建自定义单位】。
&lt;img src="/uploads/photo/2020/96734312-31ab-4039-90ac-a89d6cb991b8.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;随后会出现一个新的窗口，用来为我们的自定义单位命名，并选择该单位所使用的基础模板。
&lt;img src="/uploads/photo/2020/db681d5b-f89e-42dd-8fdb-bdab57210d30.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;我们命名新的单位为【平凡的勇者】，并选择人族的英雄【圣骑士】作为模板。
（如果我们想要制作一个英雄单位，那么我们的模板单位也必须是英雄。）
&lt;img src="/uploads/photo/2020/607cca70-1031-4e22-b32e-1ae5c12e384a.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;点击【确定】，我们便获得了一个新的单位类型：平凡的勇者。
&lt;img src="/uploads/photo/2020/63d1ffa6-3615-4395-ba89-8991fd4c3346.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;在没有做任何修改的情况下，一个新的单位的所有数据会和其【模板单位】的所有数据相同，不过这不是我们想要的。&lt;/p&gt;

&lt;p&gt;我们不希望勇者在一开始就拥有强大的圣光加持，并且他也没有什么领袖的力量。因此，我们删掉【技能 – 英雄】里的所有技能。&lt;/p&gt;

&lt;p&gt;选中【技能 – 英雄】列后，按下回车键或鼠标左键双击，打开英雄技能列表。&lt;br&gt;
&lt;img src="/uploads/photo/2020/2e7c7199-fc5c-4b0a-948e-eeb9049e16cf.png!large" title="" alt=""&gt; &lt;/p&gt;

&lt;p&gt;在打开的列表中选中技能，并点击下方的【删除英雄技能】，直到删掉全部 4 个英雄技能。
&lt;img src="/uploads/photo/2020/e35ff10b-29a0-4b08-89b5-e9f9fbda4e64.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;在完全删除后，点击【确定】，我们便可得到一个没有技能的英雄。
&lt;img src="/uploads/photo/2020/199799f3-2885-43d4-9dd9-d021827f4261.png!large" title="" alt=""&gt;
&lt;img src="/uploads/photo/2020/a37d7625-1c88-4371-8b09-9c364bccd03f.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;不过现在，我们的【平凡的勇者】的模型仍然使用的是【圣骑士】的模型，这不是我们想要的。我们找到【显示 – 模型文件】，双击，然后找到【村民】的模型。
&lt;img src="/uploads/photo/2020/04e9c7f5-da23-4d41-a242-6d05c7a13074.png!large" title="" alt=""&gt;
&lt;img src="/uploads/photo/2020/56663a25-2c0a-48af-9896-9d1ede2e499b.png!large" title="" alt=""&gt;
&lt;img src="/uploads/photo/2020/5c57a2df-471b-4c06-a89d-bfb9a54e2f7f.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;随后点击确定，我们便得到了一个模型为【村民 (男性)】的【平凡的勇者】角色，这个角色可以作为我们故事的主角。
&lt;img src="/uploads/photo/2020/50537a08-63d6-435b-896c-217511b38a2e.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;回到左侧列表，在【平凡的勇者】文字上点击鼠标右键，然后选择【在工具面板中选择】，地图编辑器就会自动帮我们选中【平凡的勇者】。
&lt;img src="/uploads/photo/2020/6cb5be7c-5153-4b77-ab00-c9821398a305.png!large" title="" alt=""&gt;
&lt;img src="/uploads/photo/2020/654a38a0-2cab-4eae-8140-16cc8a347073.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;将平凡的勇者放置到村庄，然后删掉先前我们放置的【山丘之王】英雄。
&lt;img src="/uploads/photo/2020/2689b04b-8431-4305-a4c2-c0abdfa7dc5e.png!large" title="" alt=""&gt;
&lt;img src="/uploads/photo/2020/51cae4c9-d3d8-4b64-b847-a6c1a7fbc14a.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;现在我们获得了一个更接地气的单位，并且可以使用这个单位作为主角来展开冒险了。
&lt;img src="/uploads/photo/2020/89737a0e-2ba4-4317-8be0-657503ccd09d.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;显然，我们发现主角的头像图标仍然是【圣骑士】，并且攻击力、护甲和生命值都显得很夸张，主角的称谓【卓尔 - 忏悔者】也不符合我们的故事设定，操作时的声音
逐个修改它们。
&lt;img src="/uploads/photo/2020/d77ca7a6-cdb0-4367-ab46-fd5a817abb13.png!large" title="" alt=""&gt;
&lt;img src="/uploads/photo/2020/cbe1163e-534d-4592-9592-c8b35e50abc7.png!large" title="" alt=""&gt;
&lt;img src="/uploads/photo/2020/2c282db7-3e24-437e-93b0-d92a00e02cf3.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;在魔兽争霸中，英雄的攻击力、护甲和生命值是通过力量、敏捷、智力计算出来的。
如果我们不想抛弃这既有的规则，那么我们可以直接修改其属性值。
&lt;img src="/uploads/photo/2020/130eb403-3b3a-4038-a86e-fa67691ff9f6.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;那么如果我们想使用我们自己的数值公式呢？——我们会在未来的教程中教学如何这么做。
不过现在，让我们回到游戏中再看看。
&lt;img src="/uploads/photo/2020/87ac761f-df2e-4dd8-bee5-82c5c97ceedf.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;好了，现在我们有符合我们故事的主角了。&lt;/p&gt;</description>
      <author>DreamerQW</author>
      <pubDate>Fri, 27 Nov 2020 18:18:21 +0800</pubDate>
      <link>https://beta.w2solo.com/topics/698</link>
      <guid>https://beta.w2solo.com/topics/698</guid>
    </item>
    <item>
      <title>《从零开始的 RPG 游戏制作教程》第一期：制作基础场景</title>
      <description>&lt;p&gt;RPG，Role-Playing-Game。顾名思义，我们需要让玩家能扮演一个在游戏中行动的虚拟角色，并在一个虚构的游戏世界中行动。
本教程会基于《魔兽争霸 III》制作一个典型的 ARPG 游戏，扮演一个生活在游戏世界的角色，并与游戏内的场景、人物、怪物等，不断成长。&lt;/p&gt;

&lt;p&gt;&lt;em&gt;目录：&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://indiehackers.net/topics/673" rel="nofollow" target="_blank" title=""&gt;前言篇&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;第一期：制作基础场景&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;在一个世界开始冒险之前，我们首先要有冒险的地方。
因此第一步，我们制作冒险的第一个场景：村庄。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;下载制作工具&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;我们相信实践是一种有效的学习方式，因此在正文开始之前，我们先附上我们的制作工具的下载链接。
你可以先浏览正文，但我们强烈推荐你下载教程所使用的制作工具，并跟随正文一起在实践中学习。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;第一步：下载《魔兽争霸 III 冰封王座》1.27 版客户端&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;通过暴雪官网下载《魔兽争霸官方对战平台》（&lt;a href="https://dz.blizzard.cn/" rel="nofollow" target="_blank"&gt;https://dz.blizzard.cn/&lt;/a&gt;）后，安装、启动，注册账号并登录。
完成登录后，找到平台右上角的选项图标（ &lt;img src="https://img.way2solo.com/uploads/photo/2020/ec19c63a-1900-49a2-9f6e-19aa375281d6.png!large" title="" alt=""&gt;  ）点击这个图标，在弹出的菜单中点击【设置】。
&lt;img src="https://img.way2solo.com/uploads/photo/2020/e875561d-28b9-45ae-972b-3ddef026675e.png!large" title="" alt=""&gt;
随后在弹出的窗口中，左侧选择【游戏路径】，然后点击《魔兽争霸 III》右侧的【立即下载】按钮，随后选择游戏的安装目录（比如 C:\Program Files），点击确认，对战平台便会自动下载并安装 1.27 版本的《魔兽争霸 III 冰封王座》客户端。
&lt;img src="https://img.way2solo.com/uploads/photo/2020/a23453a9-df91-4ef5-90f1-233cb2600b46.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;第二步：下载《魔兽地图编辑器》&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;《魔兽争霸 III 冰封王座》客户端附带的地图编辑器是英文的，不利于我们学习，但魔兽地图制作社区自发进行了编辑器的汉化和增强，你可以通过网址 &lt;a href="https://rpg.dz.blizzard.cn/editor" rel="nofollow" target="_blank"&gt;https://rpg.dz.blizzard.cn/editor&lt;/a&gt; 来下载整合了这些汉化和增强功能的 1.27 版本的魔兽地图编辑器。
&lt;img src="https://img.way2solo.com/uploads/photo/2020/db92c45f-174c-4f5e-8183-89a67bb9537f.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;创建一个新项目&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;第一步：启动编辑器&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;下载好魔兽地图编辑器后，解开压缩包，找到 WorldEdit.exe 并双击启动它。
&lt;img src="https://img.way2solo.com/uploads/photo/2020/bdcdb4c3-1cce-4e5e-979d-7f3dd4041094.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;第二步：创建新地图&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;在编辑器窗口找到菜单，点击【文件】，点击【创建新地图】。
&lt;img src="https://img.way2solo.com/uploads/photo/2020/4f8c8038-8d2a-47dd-af9d-a994972a5e2d.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;第三步：选择【村庄】作为地形的主题&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;我们选择【村庄】作为场景的基础风格。
 &lt;img src="https://img.way2solo.com/uploads/photo/2020/846026aa-195a-4964-8cda-ddbe9045816a.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;第四步：确定创建&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;点击【确定】按钮，等待进度条完成，我们获得了一个空白的以【村庄】为主题风格的新项目。
 &lt;img src="https://img.way2solo.com/uploads/photo/2020/38cae992-23db-453a-8e22-b451e5fac571.png!large" title="" alt=""&gt;
&lt;img src="https://img.way2solo.com/uploads/photo/2020/40db7283-4e6c-4cd5-bc05-c3072a034a8f.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;制作场景&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;第一步：刷地形纹理&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;在编辑器左下角，你可以看到一个树状菜单，通过点击【地形】、【纹理】，你可以找到【村庄】风格的【纹理】。
 &lt;img src="https://img.way2solo.com/uploads/photo/2020/0b862a14-9927-4fd3-aedc-b43ffb4248ba.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;任意点击一个【纹理】后，你就能够在我们目前的工作窗口【地形编辑器】中，通过左键单击或按住左键拖动来改变鼠标指定处地形的纹理，就像下图：
 &lt;img src="https://img.way2solo.com/uploads/photo/2020/f29d6e9f-1a9d-4a50-aeb1-cc1569983281.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;第二步：修改地表高度&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;我们想要塑造一个位于高地不平的山道附近的小村庄，因而我们需要通过对地表高度的修改，来实现诸如山峰、丘陵的效果。
 &lt;img src="https://img.way2solo.com/uploads/photo/2020/7d04d232-6553-4a86-b10d-716e4a5fc21d.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;使用【隆起地表】工具，我们可以把地表抬高，降低则可以把地表降低。综合使用这些工具，我们可以塑造出诸多地形风貌。
 &lt;img src="https://img.way2solo.com/uploads/photo/2020/8f4ae221-48f5-4b0d-9b26-0621ef343c25.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;不过现在有一个新问题是，我们始终只能对一个小方块进行隆起和降低，这太低效了。
解决办法，找到地形编辑器顶部菜单的【窗口】，点击【显示面板】。
 &lt;img src="https://img.way2solo.com/uploads/photo/2020/1057abc6-a61b-4c54-b29a-35d07f921213.png!large" title="" alt=""&gt;
&lt;img src="https://img.way2solo.com/uploads/photo/2020/5243a568-2f18-488b-88dd-4391d1491ced.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;将面板调整到【地形面板】，然后修改尺寸：
&lt;img src="https://img.way2solo.com/uploads/photo/2020/bf5d0a1a-abb4-4f59-b5c3-b007a6a920d2.png!large" title="" alt=""&gt;
&lt;img src="https://img.way2solo.com/uploads/photo/2020/547e1535-4f82-417c-a8e5-700c77b47248.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;现在我们就能够更舒适地对一大块地表高度进行调整了：
 &lt;img src="https://img.way2solo.com/uploads/photo/2020/5e2a91d3-8fe2-4699-81fd-b3970129d58a.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;不过你可能会发现这个地形编辑器中始终有这种黄白相间的网格，如果你想更好地观察地形本身，而不希望被网格干扰，你可以通过在【菜单】、【察看】中，将【栅格】修改为【无】来隐藏它。
 &lt;img src="https://img.way2solo.com/uploads/photo/2020/aa1807c1-55d6-417b-ada9-0e1f7505226b.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;此外，如果你感觉镜头太低了，想要拉远一些观察全貌，你可以通过【鼠标滚轮】来调整编辑镜头的远近。
 &lt;img src="https://img.way2solo.com/uploads/photo/2020/122661ba-7670-4077-8f8f-ed7a7106cecc.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;进行一番修改后，我们发现画面变得很暗。
这是因为地形编辑器内置了【时间】设定，你可以在右下角观察到现在的编辑器时间。
 &lt;img src="https://img.way2solo.com/uploads/photo/2020/893bc19c-a7a8-4155-b389-ac3cffcb8ea9.png!large" title="" alt=""&gt;
&lt;img src="https://img.way2solo.com/uploads/photo/2020/908e495c-bf13-4a0e-a10e-0b80f3638ab3.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;但是这昏暗的画面会影响我们制作，因此如果想要画面光线稳定，你可以有 2 种做法。&lt;/p&gt;

&lt;p&gt;第一种：关闭光照
&lt;img src="https://img.way2solo.com/uploads/photo/2020/4f5ff75d-473b-4737-992f-a6dd95064eee.png!large" title="" alt=""&gt;
&lt;img src="https://img.way2solo.com/uploads/photo/2020/10c2f82e-921f-4e18-948e-a0e67681c39b.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;但这种方式会导致【阴影】也消失，如果你只是想要光照稳定，但想保留【阴影】效果，你可以使用第二种方式。&lt;/p&gt;

&lt;p&gt;第二种：固定游戏时间
找到【菜单】，点击【情节】，点击【地图参数】，选中【修正 – 正午】，然后点击确认。
&lt;img src="https://img.way2solo.com/uploads/photo/2020/719c8b82-7f08-4d81-af7a-7b0732d68644.png!large" title="" alt=""&gt;
&lt;img src="https://img.way2solo.com/uploads/photo/2020/4a5630d2-bc0d-4446-8e10-913e79739253.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;效果如下：
 &lt;img src="https://img.way2solo.com/uploads/photo/2020/afb44874-0099-40b7-a111-370333315d95.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;同时右下角的【时间】属性会被固定在 12:00 。
 &lt;img src="https://img.way2solo.com/uploads/photo/2020/f62515d0-2250-475e-b382-bb9f7ff06d07.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;第三步：增加一些植物&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;通过把工具面板的【地形面板】切换为【装饰物面板】，然后我们找到【村庄】【树木/可破坏物】，选择【村庄树木】，并将【刷子尺寸】设置为 2，可以得到一个能够快速刷出大量树木的刷子。
&lt;img src="https://img.way2solo.com/uploads/photo/2020/d06dce76-1102-4bb3-b68e-8ada6c379e21.png!large" title="" alt=""&gt;
&lt;img src="https://img.way2solo.com/uploads/photo/2020/71b4f1a5-8798-4ed1-bd02-60cd2d6d7cb9.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;通过左键点击，我们可以刷出这些树木。
 &lt;img src="https://img.way2solo.com/uploads/photo/2020/ed41b880-7ba9-456c-96fc-3790ad2f66e9.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;如果你发现你意外地刷错了，比如这里树木不应该长在【岩石】地表上，你可以按下【撤销】按钮：&lt;img src="/uploads/photo/2020/16ac830d-1504-4fdc-9fe0-d7cdce6600a8.png!large" title="" alt=""&gt; ，来撤销你刚才的操作。
 &lt;img src="https://img.way2solo.com/uploads/photo/2020/c2d59e52-a0f9-486d-b372-85acd80e9cde.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;或者，你也可以通过激活【选择刷子】，来进入选择模式，通过【Shift+ 鼠标左键点击】或【框选】来选中你错误刷出的树木，并点击键盘上的【Delete】按键来删除它们。
 &lt;img src="https://img.way2solo.com/uploads/photo/2020/66cc0f7b-8366-4ff2-b7e3-50b739ede93a.png!large" title="" alt=""&gt;
&lt;img src="https://img.way2solo.com/uploads/photo/2020/2eeb9f40-8a21-4622-9000-c95a65ffe087.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;第四步：增加单位&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;然后我们可以考虑增加一些符合村庄风格的建筑和人物，来让这个地方看起来有点人生活的气息。
通过将【工具面板】切换到【单位面板】，选择你要的单位，然后放置到场景上。
&lt;img src="https://img.way2solo.com/uploads/photo/2020/bed3704a-092f-4028-9d0e-fc14ec180a4f.png!large" title="" alt=""&gt;
 &lt;img src="https://img.way2solo.com/uploads/photo/2020/69774152-ebf0-44c1-9ef6-4e5e2d41ac9b.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;我们也可以翻到【中立被动】，找到小动物。
&lt;img src="https://img.way2solo.com/uploads/photo/2020/5152e4fa-5814-4d7b-812b-b588562b0a93.png!large" title="" alt=""&gt;
&lt;img src="https://img.way2solo.com/uploads/photo/2020/247c2dc7-751b-452c-86a2-35719c748d96.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;通过增加这些细节，我们可以获得一个富有生命力的村庄场景。
完成这些工作后，我们要进行最后一步。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;第五步：保存项目&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/uploads/photo/2020/408b39be-bdea-45d4-9d56-9a250c716fad.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;通过【菜单】【文件】【保存地图】，我们可以将当前的项目保存到硬盘中。
 &lt;img src="https://img.way2solo.com/uploads/photo/2020/b5f89ea7-02e7-4f55-85c6-a1d0b1a86b6d.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;现在，我们的劳动成果被永久（只要硬盘不损坏、或者文件不被删除）地保存下来了。
我们可以退出魔兽地图编辑器，然后等到下一次我们想要再一次为这项目投入更多时间的时候，再一次打开魔兽地图编辑器，然后通过【打开地图】（A 处）或者【最近打开的地图】（B 处）来重新访问并继续修改这个项目。
 &lt;img src="https://img.way2solo.com/uploads/photo/2020/05667b2a-9777-411e-8779-22ce2ac534d7.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;那么本期教学内容就到这里。&lt;/p&gt;

&lt;p&gt;如果你感兴趣，你可以进一步自行尝试制作魔兽场景，使用正文里提到的【地形面板】来为地形刷上不同的纹理，或者使用高度工具来实现诸如沟壑、丘陵、悬崖的地形构造，或者你可以重新创建一个地图，选择不同的主题，制作不同风格的场景。
魔兽地图编辑器是基于魔兽争霸 3 的 MOD 制作工具，因此在魔兽地图编辑器内，你可以访问到绝大多数魔兽争霸 3 内置的资源，你可以自由地尝试编辑器内的诸多功能，查看属于魔兽争霸 3 的丰富资源。&lt;/p&gt;

&lt;p&gt;这款编辑器在过往帮助爱好者们创作出了《DOTA》、《澄海 3C》、《守卫剑阁》等一系列炙手可热的对抗、RPG 地图。这些地图虽然必须依赖《魔兽争霸 III》才能运行，但由于其相对完善的功能和较低的门槛，对于想要进入游戏制作领域的人来说，它仍然是一个很好的起点。
如果你想要自行了解更多关于魔兽地图、魔兽 RPG 的内容，你可以通过任意常见的搜索引擎或在热门的媒体或社区网站搜索 “魔兽 RPG”。希望这能够丰富你对魔兽地图的认识，也能够了解我们可以做出什么样的成果。&lt;/p&gt;</description>
      <author>DreamerQW</author>
      <pubDate>Fri, 20 Nov 2020 16:38:27 +0800</pubDate>
      <link>https://beta.w2solo.com/topics/675</link>
      <guid>https://beta.w2solo.com/topics/675</guid>
    </item>
    <item>
      <title>《从零开始的 RPG 游戏制作教程》前言</title>
      <description>&lt;p&gt;前言&lt;/p&gt;

&lt;p&gt;欢迎点开本教程。
既然你都点开了这教程，考虑读这么个长篇教程了，不妨花个 3 分钟读读前言，来了解一下我们希望通过这套教程为你带来的除了技能以外的更重要的东西吧。&lt;/p&gt;

&lt;p&gt;本教程是以普及成体系的游戏制作知识为目的而撰写的一套入门级的角色扮演游戏制作教程和进阶指南。我们希望帮助那些不满足于制作简单的游戏 demo，对制作更复杂的游戏感兴趣的，想要深入了解如何制作具有一定设计复杂度、包含更丰富内容游戏的爱好者或开发者们，并为他们指引前进的方向。&lt;/p&gt;

&lt;p&gt;本教程会基于经典的《魔兽争霸 III 冰封王座》所附带的 MOD 制作工具《魔兽地图编辑器》来讲解如何制作一款简单、轻量，并且有趣的上帝视角的角色扮演游戏。之所以选择这个工具，是因为它具有一套相对完善且易上手的 RPG 功能。上手门槛低，但制作上限高，这契合了本教程希望指引读者入门并进阶的需要。&lt;/p&gt;

&lt;p&gt;在这套教程中，我们会在循序渐进的指引过程中讨论一些理论和规范，以及它们存在的作用，但我们不会提供、也相信游戏制作没有一套权威的准则，或者什么万能的制作规范。
我们会通过这套教程带你体验一款轻量级的游戏的完整制作过程，并以此为脉络，与你展开讨论诸如：关卡、怪物、玩法、系统、等等衍生的，与游戏制作相关的话题。&lt;/p&gt;

&lt;p&gt;视频游戏的制作往往会涉及到对各类素材资源的制作，诸如 3D 的人物、怪物、植物、场景的模型，视觉效果的模型，各类贴图素材等等。但是，本教程的主干不会对 “素材制作” 这一庞大的领域进行过多讲解。这并不意味着我们认为这些素材不重要，而是我们认为游戏制作是一大堆素材资源加上互动后形成的总和，单纯地投入对素材的制作和打磨不能制作完整的游戏，反而还可能陷入对品质的极致追求，反而导致项目整体研发进度的失衡最终导致项目研发失败。在本教程的主干中，我们会优先讲解如何制作完整的游戏，而关于细分素材的品质提升，我们会在后续拓展时才讲解。&lt;/p&gt;

&lt;p&gt;本教程的正文主要会讲解制作的具体技术和相关操作流程，而在正文之外，我们会根据当期内容主题，在 “杂谈” 分节中进行或粗略或详细的拓展说明或笔者的个人观点、经验，我们希望这些内容能够让你感受到游戏制作不只是一门机械的手艺，而是一种充满思想的创作活动，也希望你在学完本教程后，掌握的不仅仅是技能，也能拥有关于这门技艺的，你自己的思想、观点、理念。
——那么，愿你拥有一段愉快的旅程，冒险者！&lt;/p&gt;

&lt;p&gt;骑士，于杭州&lt;/p&gt;

&lt;p&gt;2020年11月17日&lt;/p&gt;

&lt;p&gt;关于笔者，和撰写本教程的动机
笔者是一名从 99 年开始接触游戏的游戏玩家，和从 08 年开始以兴趣为目的接触游戏制作、14 年以游戏制作为职业的游戏制作者。笔者投入许多时间用于制作 MOD、独立游戏和兴趣社区运营，笔者自认制作经验不能算丰富和专业，但也在这些年的经历中积攒了不少关于游戏制作的个人见解可供分享。&lt;/p&gt;

&lt;p&gt;受到同行朋友邀请和帮助，笔者开始撰写这套教程，希望这套教程能够为那些想要以制作游戏为未来职业的有志之士提供指引，并尽可能地帮助他们、或者说 “正在阅读本教程的你”，在正式决定投身游戏事业之前，建立一定程度的、关于 “游戏” 和 “游戏制作” 的、你自己的理解和认知。&lt;/p&gt;

&lt;p&gt;但即便如此，由于笔者并非专业撰写书籍为生，在传播的知识中难免会出现疏漏、错误、不专业或不严谨之处，如果读者在这方面发现问题或有不同见解，欢迎在本教程发布的社区下直接评论指出或讨论，以尽可能地避免误人子弟、或为读者提供多角度的思考，感谢。&lt;/p&gt;</description>
      <author>DreamerQW</author>
      <pubDate>Fri, 20 Nov 2020 10:24:54 +0800</pubDate>
      <link>https://beta.w2solo.com/topics/673</link>
      <guid>https://beta.w2solo.com/topics/673</guid>
    </item>
  </channel>
</rss>
