Grubby:三个月顶尖
我本以为我能进步的更快,我有点缺乏耐心...[详细]
了解更多有关暴雪官方地图及MOD游戏的信息,浏览《星际争霸II》设计人员编写的地图制作教程,学习如何自己制作游戏地图。
目标:
学会使用“触发器模块”,通过创建触发器来控制游戏获胜、游戏失败以及脚本编译的游戏内事件。
最终效果:
下图即是我们本篇教程所要达到的最终效果:
我们要制作一关冒险风格的小型任务,在该任务中,我们的英雄要调查出到底是什么东西一直在阿格瑞亚星球上毁坏和偷吃移民的庄稼。
介绍:
“触发器模块”就是负责控制和疏导游戏玩法以及剧情走向的重要模块。创建游戏内剧情动画、游戏中期暴兵、创建和跟踪任务目标等等游戏玩法的设计,都是通过“触发器模块”来进行的。
“触发器”可以视作为一组游戏指令的最基本构成单元。无论你何时想要在游戏中产生何种事件,你都可以使用一个“触发器”来指示游戏,游戏会准确地按照你的要求产生事件。
一个触发器是由以下几种元素构成:
1.事件 即导致“触发器”运行的原因。如果我们想创建一个“当英雄死亡时游戏即结束”的触发器时,那么这个触发器的事件就应该是“单位死亡”。
2.条件 ——条件是指该“触发器”运行所需要满足的特定条件。比如在上面提到的例子中,当“触发器”因为某个单位死亡而运行时,我们可以设置一个“条件”以限制只有当死亡的单位是英雄时才运行。
3.动作 ——动作即是当该“触发器”运行时游戏将会执行的指令。在我们的例子中,当英雄死亡时会执行的“动作”是“玩家1游戏结束”。
在我们开始之前:
我们将继续使用我们在本篇教程第一部分中所制作的地图。在上一节的地形教程中,我们只完成了创建山崖和军事基地。而在这一节的触发器教程中,我们将通过我们在教程第一部分中所学到的地形制作知识完成地图的最后完善部分。
我们已经添加了若干处英雄会前往的关键区域,如下图所示:
我们在地图东南区域添加了一个小型的移民地,就在道路旁边。这些就是庄稼被毁的可怜人的所在地。
我们还添加了一处被毁农场的区域,同时在庄稼中央还有一只“雷兽”(处于潜地状态)。消灭这只雷兽就是我们这张地图的任务目标。
我们还在庄稼地东面以及移民居住地北面添加了一处较小的可选区域。这里也放置了少量的异虫单位。
最后,我们在整张地图四周都分散放置了一些小型异虫单位,这些主要是供玩家在游戏中有所互动。
I. 设置视图选项
点击编辑器工具条上的“触发器模块”按钮,或者按 [F6]打开触发器编辑器。
在我们开始涉入“触发器”前,我们先快速过一遍设置“触发器模块”窗口的几种不同方法。我们有两种选项可以设置,当然你也可以尝试下其它选项。
A. 显示子视窗
“触发器窗口”包含了一个罗列出了地图上所有“触发器”的列表,即左侧部分的列表。程序的默认设置已经在地图上创建了一个“对战初始化”触发器。
如果你想对该触发器中的“事件”、“条件”或“动作”做出任何修改,你需要双击该项,以弹出一个可以让你对“事件”、“条件”或者“动作”进行编辑的窗口。不过,如果我们开启子视窗,那么当我们单击一个项将其选中时,该项的内容即会显示在“触发器”内容的下方区域中。
要切换“使用子视窗”选项,点击位于屏幕顶部的工具条上的“使用子视窗”按钮即可。
B. 隐藏库
《星际争霸II》里的所有“事件”、“条件”以及“动作”都包含在“触发器库”里。用户可以创建他们自己的“触发器库”。不过对于本张地图,我们不需要创建任何的库,所以我们将其隐藏。要切换“触发器库”,点击工具条上的“显示库”按钮,就在“使用子视窗”按钮的旁边。
C. 更多选项
在屏幕顶部位置的“查看”菜单中可以找到更多的选项,不过我们暂时先不涉及这一块,但是如果你喜欢的话,你可以自己花点时间先熟悉熟悉。
II. 第一个触发器——“胜利”和“失败”触发器
让我们开始做上几个触发器吧!前两个要做的是简单的“胜利”和“失败”触发器,也就是玩家杀死“雷兽”以及“坑道虫”时游戏胜利结束的触发器,以及玩家单位死亡时游戏失败结束的触发器。
在做之前,我们先删除“对战初始化”触发器。“对战初始化”触发器包含的是为《星际争霸II》对战地图所提供的动作;这些动作在我们的地图上用不着,因为这是一张自定义地图,不需要采矿或者建造建筑的那套对战的东西。你可以选中这个“触发器”然后再按键盘上的[Delete]键,也可以右键点击触发器再选择“清除”选项。
A. “失败”触发器
“失败”触发器应当在我们的英雄死亡时运行,其效果就是为玩家以游戏失败的方式结束游戏。
创建一个新的触发器:
1. 右键点击“触发器列表”,然后选择“新建>新建触发器”,或者按 [Ctrl+T]组合热键进行创建。
2. 然后给我们新建的触发器取名为“Defeat”。
3. 选中该触发器以显示出其内容。
创建一个新事件:
1. 要添加一个“新事件”到该“触发器”,右键点击“事件”标签,然后选择“新建>新建事件”,或者左键点击选中“事件”标签后再按 [Ctrl+E]组合键。
2. 从弹出的窗口中选中“单位死亡”事件,然后点“确定”。
创建一个新条件:
1. 右键点击“触发器内容”列表,然后选择“新建>新建条件”,或者按 [Ctrl+K]。
2. 弹出的窗口包含了一个“条件”类型的列表。从该列表中选择“比较”条件,然后点击“确定”按钮。我们之所以要用“比较”条件,是因为我们要比较死亡的单位是不是我们的英雄单位。如果死亡的单位是英雄,则条件为真,那么触发器的动作即会执行。
3. 你刚刚创建的“条件”会自动被选中,你可以在子视窗区域中看到它的内容。子视窗里有“值1”、“运算符”以及“值2”三个字段。
4. 双击“值1”字段弹出一个可以选择各种条件的列表,然后选择“进行触发的单位”,即导致该触发器进行运行的特定单位。
5. “运算符”字段是我们就希望“条件”的两个值如何进行运算所进行选择的地方。在比较运算符情况下,只有两种选项:等于 (==),或不等于 (!=), 因为我们要比较的两个单位要嘛是相同的,或者不同。不存在“某种相同”的值。我们将把“运算符”保留成 “==”,因为我们要的就是当死亡的单位是英雄单位时即运行触发器。
6. 双击“值2”再次打开“条件”列表。这次我们就不是从列表里选“条件”了。相反,有一排空心圆选项,这些是负责指定你要从中选取的条件值类型。现在,我们选“值”选项,打开包含地图上所有所存在的单位的列表。在做地图地形时,我们为玩家1预先放置了单位,也就是2名陆战队员和一个“吉姆?雷诺(突击队)”单位。在列表中找到“吉姆?雷诺(突击队员)”,然后选中他再按“确定”。
创建一个新动作:
1. 右键点击触发器内容列表,选择“新建>新建动作”,或者按 [Ctrl+R]组合键。
2. 从弹出的动作列表中,找到并选择“为玩家结束游戏”。在“查找”字段中输入“触发器”的部分名称可以帮你缩小搜索范围。
3. 选择“动作”会显示出该动作的内容,效果和我们在选“条件”时一样。
4. 双击“类型”字段,将该值从“胜利”更改为“战败”。
测试看看!
我们已经完成了第一个触发器!现在就让我们进游戏测试一下我们的触发器吧。
1. 点击编辑器工具条最右边的“测试文档”按钮,或者按 [Ctrl+F9]。
2. 一进入游戏,选中你的单位,然后命令他们对吉姆?雷诺进行攻击。当雷诺死亡时,你就会看到弹出这样一个“游戏结束”的窗口:
B. 胜利触发器
下面我们要做的是一个简单的“胜利触发器”。这个“触发器”会在玩家杀死“坑道虫”和“雷兽”之后为玩家1以游戏胜利的方式结束游戏。
如果你还没有在地图上放置“坑道虫”和“雷兽”的话,那现在就赶紧先放置好单位吧。关于如何在地图上放置单位的知识,请回顾本教程系列的第一部分,即“地形模块”中的“单位”部分。我们已经在地图的农场区域放置好了这两个单位了。
在我们做触发器之前,我们需要给我们要在任务中杀死的这两个单位分别设置一个变量。
变量!
变量在《星际争霸II》编辑器中的作用与它们在脚本编译和语言编码中是一样的。
如果你不熟悉变量的概念,那我们就稍微解释一下,一个“变量”是一种识别符,可以被设置成某个值。比如,如果a是我们的“变量”,那么我就可以设置a = 5。如果我们在一个方程式中用到a 时,那这个方程式中就相当于是在用5这个值,也就是说a + 2 = 7。你可以在任何时候改变一个“变量”所设定的值。所以我们可以在完成a + 2 这个方程式之后,用a = 6 的新设定的变量来替换a = 5的旧设定,这样一来我们下次在方程式中用到a 时,我们用的实际数字就不是5而是6了。我们在《星际争霸II》编辑器中可以有许多种不同类型的变量,例如“单位”变量、“整数”变量以及“文本”变量。
如何在“触发器模块”中制作一个“变量”:
1. 在“触发器列表”中右键点击,然后在弹出的菜单中选择“新建>新建变量”或者按 [Ctrl+B]。给你新建的变量取名为“NydusWorm”。
2. 当你选择该“变量”时,你可以在右侧看到该变量的内容。每个变量都一种类型,而类型对应了该“变量”所能储存值的类型。变量可以储存整数值、实数值、文本值、单位值等等等等。我们的这个变量需要设置的值类型是“单位”,因为我们要把 放置在地图上的“坑道虫”这个特定单位储存为我们的变量。
3. 在右边的分区中双击“初始值”字段。
4. 然后选择“值”类型的空心圆选项,找到并选择“坑道虫(坑道)”单位。
5. 对“雷兽”单位重复同样的步骤。
现在,我们准备要制作“胜利”触发器了。现在就开始创建吧
事件:
我们上一个触发器有一个每当有单位死亡时就会运行的事件。这次我们要使用一个名为“周期性事件”的事件来使该“触发器”能间隔一段时间重复运行。
1. 右键点击“触发器”区域部分,选择“新建>新建事件”或者按 [Ctrl+E]。
2. 然后在弹出的窗口中,从“函数”部分中选择“周期性事件”。
3. 将“持续时间”值从5.0改为1.0。
4. “时间类型”保留为“游戏时间”。
条件:
至于这个触发器,我们需要两个条件:两个单位每个都要一个条件进行判断。
1. 在“触发器区域”中右键点击空白处,选择“新建>新建条件”,或者按 [Ctrl+K]。
2. 将“条件”类型选择为“比较”,然后点“确定”。
3. 选中新建的条件,在子视窗区段中查看其内容。
4. 将“值1”更改为“单位是活体状态”。
5. 将“单位”值更改为我们 已创建好的单位变量“NydusWorm”。
6. 双击“值2”打开“值2”选择窗口,一定不要忘了取消“真”判断的勾选,然后按“确定”。我们要将“值2”设为“假”,因为我们要触发器在单位死亡状态时运行。
7. 请为“雷兽”也重复类似的步骤。如果想节省时间,你也可以先将第一个触发器进行复制并粘贴,然后只需更改第二个条件的“单位”变量的设置即可,因为这两个触发器只有各自的“单位”变量不同而已。
当你在一个“触发器”中有两个“条件”时,则触发器本身只会在两个“条件”都判断为“真”时才会运行。如果你想让两个条件中的某一个“条件”为真时,触发器即会运行,那么你可以添加一个“或”条件,然后在“或”条件中创建次级条件。这样一来,“或”条件中只要有一个条件被满足,也就是为“真”,那么整个父级条件即为“真”,则触发器就会运行。
在我们的实例中,我们需要“坑道虫”和“雷兽”两个单位都死掉才能完成任务,所以我们这里不会用到“或”条件。
动作:
按照我们为上一个触发器所做的那样,再创建另一个“为玩家结束游戏”的动作。只是这个动作要确保它是以“胜利的方式为玩家结束游戏”,而不是“战败”。
C. 文件夹
保持我们的“触发器”有个系统性的组织很重要,所以在我们进入下一个步骤之前,我们准备在“触发器列表”中创建一个文件夹,然后把我们的“Victory”、“Defeat”以及变量都进这个文件夹中。
1. 在“触发器列表”中右键点击鼠标,然后选择“新建>新建文件夹”,或者在触发器列表中左键点击你的鼠标给定区间,然后按 [Ctrl+G]也可以。
2. 将你的“触发器”和“变量”拖进你希望存放的文件夹。
你会在我们接下来的教程中看到若干个创建的文件夹,并且是按用途命名的,以区分不同的触发器:“胜利和失败”触发器、“游戏玩法”触发器、“任务目标”触发器等等。