中国星际RPG联盟

 找回密码
 注册

QQ登录

只需一步,快速开始

文章内容

地图制作教程:触发器模块

发布者: castelu | 发布时间: 2013-9-16 20:25| 查看数: 18228| 评论数: 2|帖子模式

  目标:

  学会使用“触发器模块”,通过创建触发器来控制游戏获胜、游戏失败以及脚本编译的游戏内事件。
  
  最终效果:

  下图即是我们本篇教程所要达到的最终效果:




  我们要制作一关冒险风格的小型任务,在该任务中,我们的英雄要调查出到底是什么东西一直在阿格瑞亚星球上毁坏和偷吃移民的庄稼。

  介绍:

  “触发器模块”就是负责控制和疏导游戏玩法以及剧情走向的重要模块。创建游戏内剧情动画、游戏中期暴兵、创建和跟踪任务目标等等游戏玩法的设计,都是通过“触发器模块”来进行的。

  “触发器”可以视作为一组游戏指令的最基本构成单元。无论你何时想要在游戏中产生何种事件,你都可以使用一个“触发器”来指示游戏,游戏会准确地按照你的要求产生事件。

  一个触发器是由以下几种元素构成:

  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. 将你的“触发器”和“变量”拖进你希望存放的文件夹。

  你会在我们接下来的教程中看到若干个创建的文件夹,并且是按用途命名的,以区分不同的触发器:“胜利和失败”触发器、“游戏玩法”触发器、“任务目标”触发器等等。


  III. 使用区域的触发器     

  区域是指一张地图上的某个范围,也可以被“触发器”进行引用。例如,当某个单位进入或离开一个区域时运行一个触发器,对当前位于某个区域中的任意单位发布指令,在某个区域的随机一个点处创建单位,等等。

  在我们的地图上,我们要创建一个当我们的单位进入移民区这个“区域”时,为玩家1创建额外单位的触发器;另外一个触发器会在我们的单位进入该单位附近区域时,“雷兽”会从地面钻出。

  A. 放置区域

  在我们能在 “触发器”中用到“区域”之前,我们需要事先在地图上放置好区域。

  1. 打开“地形模块”,按[R]选中“区域”层。

  2. 从小地图下方的一排按钮中,选择“方形”或“圆形”中的一种形状。

  3. 移动你的地形视野,找到农场区域,然后左键点击农场区域中央并拖动鼠标放置好一块“区域”。

  4. 如果你想更改区域的名称,那么从左侧的区域列表中选中该区域,然后按Enter键弹出“区域属性”窗口。


  5. 你可以双击“区域”列表中的某区域,在弹出的窗口中输入你希望的名字。我们给区域命名为“区域001”,也就是默认名称。

  B. 进入“雷兽”区域时,雷兽从地面钻出

  雷兽不钻出地面的话,我们就不能杀死它完成任务。不过只要使用我们新建的区域,我们就可以让它在我们的英雄靠近时现身了。

  我们切换到“触发器编辑器”窗口吧,按[Ctrl+G]创建一个名为“Gameplay Events”的新文件夹。使用[Ctrl+T]热键在这个文件夹中创建一个新的“触发器”,取名为“-->Unburrow Ultralisk <--”在这之后,选中该“触发器”,并添加下列“事件”、“条件”和“动作”:

  事件:

  当我们的单位进入我们刚刚创建的区域时,我们需要有一个事件发生。

  1. 右键点击触发器区域,选择“新建事件”。

  2. 然后在弹出的窗口中,在“函数”区段中选择“单位进入或离开区域”。

  3. 将“区域”值更改成我们的新建区域(截图中的区域001)。当选中该区域时,“源”值会默认选择“函数”;我们需要将其改成“值”,这样才能选择区域。我们也可以使用“选择”按钮在“地形编辑器”中找到目标区域。

  条件:

  1. 右键点击“触发器”区域,选择“新建条件”然后选择“比较”,再按“确定”。

  2. “值1”应当被设为 “单位所有者”。

  3. 单位子值应设为“进行触发的单位”。

  4. “值2”应设为1 (表示玩家1)。

  动作:

  我们要给这个触发器创建两个“动作”。第一个,我们要命令“雷兽”出地。第二个,我们要添加一个动作,以显示出整个农场区域。

  1. 右键点击“触发器”区域,选择“新建动作”。

  2. 在弹出的窗口中,选择“开启或关闭触发器”,然后再按“确定”。

  3. 确保“触发器”值是设置为“当前触发器”,“状态”值是设为“关闭”。

  这样能确保“出地触发器”只运行一次。如果我们不关闭该触发器,那我们我们会不断地重复运行该触发器。

  4. 创建一个“发出指令”动作。

  5. 为单位选中“雷兽”变量。

  6. 而指令本身,我们选择“没有目标的指令”。

  7. 技能命令,我们选择“雷兽 – 出地”。

  8. “队列”字段保留为“替换现有指令”。

  9. 创建一个“显示区域”动作。

  10. 将“区域”值设为我们在事件中使用的那个区域。

  11. 将“持续时间”设置为0.0。这能确保“区域”处于一直被显示的状态;不想有“战场迷雾”盖住区域,就设置“显示”为0.0秒。

  12. “玩家”和“核对悬崖层级”保留默认设置。


  保存地图!测试吧!

  现在是时候再次进入游戏测试我们的成果了;同样也该是按 [Ctrl+S],以免前功尽弃了。

  1. 在编辑器工具条最右侧找到“测试文档”按钮,或者按 [Ctrl+F9]。


  2. 一旦地图加载完成,你的单位会遭到黄色电脑玩家的攻击。至于这个问题我们稍后再处理。眼下,我们先使用雷诺和他的两名陆战队员杀死黄色电脑玩家,然后再去移民区的农场区域找到并杀死“雷兽”和“坑道虫”。你会看到“雷兽”会从地下钻出来,杀死它们后就可以看到游戏胜利的画面了。


  如果你看到的不是这样的情况,请返回检查你的“触发器”;你可能少了什么步骤,或者什么值没有设置正确。请重新按照前面的流程检查一遍,再重试!

  C. 进入移民区域时会从移民发出关于庄稼调查和产生新增援部队的传输信息

  当我们进入移民地时,我们应该遇到移民来解释发现问题的原因,也就是要用到一个“传输信息”。

  创建一个覆盖移民区域的新区域。


  创建一个新的“触发器”,用于当你进入该区域时发送一个传输信息。

  事件:

  1. 创建一个“单位进入或离开区域”的事件。

  2. 将“整张地图”的“区域”值更改为你的新区域。

  条件:

  1. 创建一个新的“比较”条件。

  2. 将“值1”改为“单位所有者”。

  3. 将“单位”子值改为“进行触发的单位”。

  4. “运算” 保留为“==”。

  5. “值2”改为“1”。

  动作:

  1. 创建一个“开启或关闭触发器”动作,确保该“触发器”设置为“当前触发器”,并且“状态”为“关闭”。

  2. 创建一个“发送传输信息”。

  3. 你可以设置谁来发送传输信息,播放何种音效文件,显示什么样的字幕内容,等等。我们是这样设置这些选项的:


  4. 下一步,添加一个“使用默认朝向创建单位”的动作。

  5. 设置“计数”为5。

  6. 设置“类型”值为“陆战队员”。

  7. 设置“玩家”值为1。

  8. “标旗”值不用管。

  9. 我们要“陆战队员”单位出现在其中一间移民建筑位置。要实现这一点,我们需要将“点”值设置为“单位位置点”。 双击“点”值,选择“函数”单选按钮。从函数列表中选择“单位位置”,然后按“确定”。 将“点”值设置成“单位位置”会在“单位位置”下方创建一个新的子值。双击新建的“单位”值,选择“值”空心按钮,查看地图上可用的单位。 选择其中一个移民建筑,然后按“确定”。

  当我们做好后,“动作”部分就会是这样:


  10. 创建一个“发出指令到单位组”的动作。

  11. 将“组”值设置为“上一次创建的多个单位”,你可以在弹出窗口的“函数”源中找到该函数。

  12. 将“指令”值设置为“以单位为目标的指令”。

  13. 将“技能”值设置为“移动”。

  14. 将“单位”值设置为“吉姆?雷诺(突击队员)”,请在“值”源中找到他,因为他是地图上的现有单位,可以直接找到。

  15. 将“队列”值保留成“替换现有指令”。

  16. 重复4到6步,再创建几个医疗兵。

  16. Repeat steps 4-6 to create a few Medics as well.


  IV. 任务目标触发器

  如果不给玩家一到两个任务目标,玩家是不知道要在一张地图上做什么的,所以我们触发器列表上接下来就该是创建“Discover kill Objectives”和“Complete kill Objectives”了。

  在触发器列表中创建另一个文件夹,取名为“Objectives”。

  A. 发现任务目标

  “Discover kill Objectives”会在游戏画面左侧上方位置创建任务目标,包含的文本将告诉玩家任务的目标是什么。这个触发器会在游戏一开始时就运行。

  新变量:

  我们需要添加一对“变量”,以跟踪我们的两个任务目标。

  1. NydusWormObjective

  到目前为止,我们的“变量”一直都是整数。将“类型”更改为“任务目标”。

  2. UltraliskObjective

  类型:任务目标


  创建一个新的名为“Discover Objective”的触发器。

  事件:

  1. 创建一个“地图初始化”事件。

  条件:

  我们不需要给这个“触发器”设置任务条件,因为每次游戏开始时,它都要用到。

  动作:

  1. 创建一个“等待”动作。该动作会让“触发器”暂停指定的时间。我们在该“触发器”中使用一个“等待”动作,就可以让玩家在进入游戏后画面转到地图上,从而防止还没找到位置就弹出若干任务信息。这样,玩家就能有时间环顾一下四周的游戏环境,并找到地图上的单位,然后接着就看到了提示的任务目标。我们把等待的“时间”值设为2秒。

  2. 下一步,创建一个“创建任务目标”动作。保持“状态”和“类型”两个值的设置为“活动”和“首要”,但请把文本和描述改成跟击杀坑道虫有关的任务说明。

  3. 下一步添加一个“设置变量”动作。选择我们先前创建的“NydusWormObjective”变量,并为第二个值选择函数“上一次创建的任务目标”,这样我们就可以调用该“变量”来引用我们新的任务目标了。

  4. 请为“UltraliskObjective”重复步骤2和步骤3。

  当你做好触发器后,触发器模块应该如下所示:


  保存地图!测试吧!

  现在当你开始游戏后,你会在屏幕上看到任务目标了!按 [Ctrl+F9]测试地图,看看我们新建的“触发器”能不能生效。


  B. 完成任务目标

  这个触发器会在任务目标完成后触发,并会将任务目标的状态显示为“已完成”。

  事件:

  1. 创建一个“单位死亡”事件。

  条件:

  在这个“触发器”中我们需要用到“条件”了,但我们不准备把它们放在“条件”部分中。而是用特殊“动作”在“动作”部分中创建条件。

  动作:

  有时候,在你的“触发器”中间,你会遇到想根据游戏的环境以及导致触发的原因所不同,从而在不同的“动作”之间进行选择的情况。比如说在我们这个“触发器”的实例中,我们就会基于死亡的单位是“坑道虫”还是“雷兽”,来决定更改相应的任务目标状态。要实现这个动作,我们可以用“If Then Else”动作。

  “If Then Else”动作包含了一个“条件”区段和两个“动作区段”。如果“条件”为真,那么第一组动作就会执行;如果“条件”为假,则第二组动作就会执行。

  1. 创建一个“If Then Else”动作。

  2. 在“If”部分中,用“比较条件”来判断进行触发的单位是不是“坑道虫”(你需要将“值1”从“单位所有者”更改为“进行触发的单位”)。

  3. 在“Then”部分中,创建一个“设置任务目标状态”的动作,并将“任务目标”设置为我们的“NydusWormObjective”变量,然后接着再把“状态”更改为“已完成”。

  4. 将“Else”区段留空。

  5. 为“雷兽”单位重复1-4步。

  现在如果任意单位死亡,我们的“Complete kill Objectives”就会触发;当其触发时,我们的“If Then”动作会判断死亡的单位是不是我们两个任务目标中规定的单位;如果是,那么该任务目标的状态就会被认定为完成。


  保存地图!测试吧!


  让我们再次测试地图,看看我们的任务目标在杀死相应的单位时,会不会改变状态。

  V. 使用点的触发器

  “点”可以被“触发器”用于不同的目的。比如用来作为产生单位的点,单位移动的具体位置,在地图上创建各种效果的点,等等等。“点”在编辑器中是可见的,但在游戏里是不会显示的。


  放置和修改点的方式和我们放置和修改装饰物以及单位是一样的。

  A. 放置点

  首先我们需要放置一个“点”,然后才能在“触发器”中使用。

  1条件:

  . 打开“地形模块”,按[P]选择“点”层。

  2. 选择“普通点”按钮。

  3. 移动你的地形视角,找到农场区域,左键点农场区域中央以放置一个“点”。

  4. 如果你想更改你的“点”的名字,直接从左侧的“点”列表中选中它,然后按Enter弹出“点属性”窗口。


  B. 微缩地图提示

  现在我们有一个“点”了,我们可以在“触发器”中使用了。

  1. 切换回“触发器”模块,选中“发现任务目标触发器”。

  2. 在该触发器末尾添加一个新的“朝向角度创建微缩地图提示”动作。

  3. 至于“位置点”值,选择我们刚刚在地形模块中创建的那个点。记得在弹出的窗口中点击“值”单
  选按钮,这样才能查看地图上的点列表。

  4. 至于“模型”值,请选择“任务目标微缩地图提示”或者“微缩地图提示BOSS”。

  在选择“微缩地图提示“模型时,你可以在搜索框中输入“微缩地图提示”以缩小搜索范围。


  5. 将“颜色”设置成任何好看的颜色。若保留为黑色的话会导致“微缩地图提示”是隐藏的,因为微缩地图上没有探索的区域将也是黑色状态。我们给“微缩地图提示”选个绿色吧。

  6. 给“持续时间”选择一个你希望的任意值。我们将持续时间设置为0,这样会使微缩地图提示一直存在,直到我们使用“触发器”动作将其移除为止。


  当该任务目标创建好后,微缩地图提示就会在游戏中生效,告诉玩家应该前往的区域位置。

  C. 出生位置和玩家属性

  “出生位置”是对战地图中具有特殊属性的“点”。在做对战地图时,玩家的城镇大厅和工人就是创建在“出生位置”这个点上的,游戏一开始的镜头位置所在也是这里。

  我们要在玩家1单位上方的右侧放置一个“出生位置”。我们会在“触发器”的下一部分中使镜头在游戏开始时自动对准这个点。同样也为玩家2、玩家3、玩家4放置好出生位置点:

  Place down Start Location Points for players 2, 3, and 4 as well:


  下一步,我们要给我们的单位以及电脑的单位设置一些“玩家属性”。在“玩家属性”窗口中,我们可以修改每个玩家的颜色、印花、种族以及“出生位置点”。

  1. 在编辑器顶端的“地图”菜单选项中,打开“玩家属性”窗口。

  2. 对我们这张图来说,我们准备设置以下属性:


  为AI玩家添加“出生位置”可以为这些玩家启用“战役AI”。在我们的地图里启用战役AI,就可以让那些潜地的异虫单位在玩家的单位靠近时自行从地底钻出。不过这个我们稍后再介绍。当我们给电脑玩家们设置好“出生位置”值时,你会注意到我们放置在地图上的“出生位置”颜色变成了跟玩家相关联的颜色:


  VI. 地图初始化触发器

  在这一部分中,我们将创建一些“地图初始化”触发器,它们将在地图加载结束时运行,并会在你首次开始任务时设置若干不同的游戏选项和设定。这些触发器会将玩家的单位设置成与移民地居民以及基地中的单位为盟友状态。同样,还会在任务开始时,设定镜头的位置,并开启我们的任务目标。

  我们先从创建一个文件夹开始吧,把我们即将创建的所有触发器都放在这个文件夹中。按 [Ctrl+G]创建一个新文件夹,取名为“Map Initialization”。

  A. 同盟

  你或许已经注意到了,在我们测试地图时,军事基地和移民地区域中属于玩家2、玩家3的单位会攻击我们的单位。只要将玩家1、玩家2、玩家3设置成盟友关系就可以防止这种错误发生了。

  怎么做呢?我们需要在新建的“Map Initialization”文件夹中创建一个新的名为“盟友”的触发器。

  事件:

  为该触发器创建一个“地图初始化”事件,这样在地图开始时就会运行。

        条件:

  无

  动作:

  1. 创建一个“设置同盟”动作,将“源”设置为玩家1,“目标”设置成玩家2。 你会有几个不同的“同盟设定”值进行选择。我们要选择“盟友”,这样就能玩家2处于同盟关系,但是我们不能与之共享视野。

  2. 创建另一个“设置同盟”动作,将“目标”值设为玩家3,“盟友设定”设为“盟友”。

  3. 为了防止玩家2和玩家3之间的单位互相残杀,我们还必须将这两个玩家之间的关系也设置成盟友关系。


  B. 开启“战役AI”以便异虫单位能钻出地面

  除了“坑道虫”和“雷兽”,我们还在地图上放置了许多其它的异虫单位,例如潜地的跳虫、潜地的蟑螂、潜地的刺蛇。只是,如果我们的单位现在就在地图上转悠,我们只会遇到“雷兽”,因为我们做了一个触发器让它出地,而其它潜地的单位会一直处于潜地状态。

  我们的确可以选择为这些潜地的单位也做个出地的触发器,但是如果我们开启战役AI,那么那些潜地的敌对单位会在我们的单位靠近时自动出地,省去了创建触发器的麻烦。
  创建一个新的名为“Start Campaign AI”的触发器。

  事件:

  给这个触发器创建一个“地图初始化”事件,以便地图运行时触发器会触发。

  条件:

  无

  动作:

  创建一个“为玩家启用战役AI”动作,将“玩家”设置为4。

  当地图开始后,我们要将镜头视野移动到我们的英雄上空,并且要有从黑暗中淡化显现的电影效果。我们的新触发器将命名为“Camera”。


  C. 淡化显现地图并将镜头对准我们的英雄

  事件:

  1. 地图初始化

  条件:

  无

  动作:

  1. 添加一个“平移镜头”动作。将“点”设置为“出生位置 001”(记住,你可以点击“值”单选按钮找到先前创建的所有点的列表),将“持续时间”设置为0.0。这会使镜头立即切到我们的“出生位置”,而不是镜头要平移一段时间。

  2. 添加一个“淡入/淡出”动作。将“淡入”值设置为“淡出”,“持续时间”为0.0,“颜色”设为黑色 (0%, 0%, 0%)。这会让游戏一开始是黑色的画面,然后慢慢地淡变显现。

  3. 添加另一个“淡入/淡出”动作,淡化持续2秒。


  保存地图!测试吧!

  现在我们已经把所有的“地图初始化触发器”都设好,赶紧进游戏看看是否正常运行。


  当游戏开始时,我们会与玩家2、玩家3结盟,并且镜头会对准我们的英雄。当我们在地图上走动时,附近潜地的异虫会从地面钻出并攻击我们。

  VII. 使用镜头的触发器——任务胜利的电影片段(非常简单的一个)

  当任务结束后,我们应该有一小段胜利的电影片段,以作为打败怪物的奖励以及给我们讲述的这个小故事收个尾。要实现这种效果,我们需要熟悉一些“镜头”的知识,并且还要放置一对镜头,因为电影片段将会用到。

  《星际争霸II》中的镜头是在地形编辑器中。每一个镜头都包含一个镜头所对准的镜头眼、镜头距离目标点的距离、镜头观察这个点的角度。每个镜头还包含了一组关于曝光度、景深效果等等设定。

  A. 放置镜头

  你可以在地形模块中的镜头层中放置和管理你的镜头。

  1. 切换到地形模块中的镜头层,在地形模块中按 [C]或者选择“层>镜头菜单”选项即可。

  2. 将编辑器镜头移动到你希望的位置。按住 [Ctrl+Right-Click]并拖动鼠标,以调整镜头的纵摇和横摇。按住 [Right-Click]并拖动鼠标以调整镜头的目标点。

  3. 按“创建镜头”按钮,创建你的第一个镜头。我们在移民地中央区域创建了第一个镜头,因为我们的电影片段将在这里发生。


  4. 在地形模块左侧窗口中右键点击镜头列表中你刚刚创建的镜头,选择“修改属性”。你可以在属性窗口中修改镜头设定。在本教程中,我们打算保留我们镜头的所有设定为默认设定。


  仅供参考:

  视场: 调整镜头的视野宽度。该值若超过或获得鱼眼镜头效果。若要远距摄影缩放效果,该值应低于20。

  滚动: 如果你想让镜头往两侧倾斜或者上下颠倒,你可以调整该值。

  景深: 这些值负责定义镜头在观察时,焦点中所容纳的对象。如果你想让所有一切都包含在焦点中,那么你需要设置较大的“量”、“深度”和“结束”值,“开始”值要小。

  远点剪切面/近点剪切面: 所有地形经过远点剪切面,并且近点剪切面前方不会被拖入画面。不拖入地形可以提高画面表现。

  目标:镜头注视地面上的点:镜头的中心和焦点。

  5. 再创建第二个镜头。我们要像放置前一个镜头一样,在我们的移民地区域放置另一个镜头,只是这个是从不同的角度注视移民地。


  B. 播放电影片段

  现在我们放置了两个镜头,我们可以开始创建我们的“Victory Cinematic”触发器了。

  我们要在“Victory/Defeat”文件夹下创建一个名为“Victory Cinematic”的新触发器。

  事件:

  无——我们要从我们的“Victory Trigger”中直接运行该触发器。

  条件:

  无

  动作:

  1. “允许触发器可被跳过”动作就可以让玩家按[Esc]跳过该触发器的剩余动作。这个在过场动画中十分有用,因为玩家有时候并不愿意看完整个过场动画,尤其是玩家已经看过之后。

  2. 创建一个“淡入/淡出”动作。将“淡入”值更改为“淡出”,并且持续时间设置为2秒。

  3. 添加“电影片段模式”动作以开启电影片段模式。在“电影片段模式”中,UI界面将会被隐藏,游戏画面上下会出现“宽荧幕效果”的黑色区域,这样可以让画面看起来更加“电影化”。

  4. 在移民地中央放置一个“点”。我们要将单位移动到该点以配合电影片段。


  5. 要移动我们的单位,我们需要创建一个“挑选单位组中的每一个单位”动作。至于“单位组”值,请选择“区域内匹配条件的单位”(在“函数”中选择),然后将“玩家”字段设置为“1”(选择“值”单选按钮然后输入“1”)。该动作原理类似于一个“For loop”语句的效果,它会选择地图上满足条件的每一个单位,并让我们可以对其执行动作。


  6. 在“挑选单位组中的每一个单位”动作的“动作”区段中,创建一个“立即移动单位”的动作。至于“单位”值,请选择“被挑选的单位”。这会使用“挑选单位组中的每一个单位”动作所选中的单位。将“点”值更改为我们在移民地中央放置的点。


  7. 对玩家3的单位重复步骤4和步骤5,以便移民也会在电影片段中被移动到移民地区域。

  8. 双击“单位筛选器”值,确保选中单选按钮的“值”选项。在列表中找到“建筑”,将其状态从“允许的”更改为“不包括”。这会使玩家3控制的建筑不会在电影片段中也被移动到这个点。

  9. 下一步,添加一个“应用镜头对象”的动作。我们将“持续时间”设置为0,这样镜头就会被立即应用。设置“镜头对象”为我们所创建的第一个镜头。


  10. 添加另一个“应用镜头对象”的动作,将“镜头对象”设置为我们的第二个镜头。将该动作的“持续时间”设置为10秒。这会让镜头在我们创建的两个镜头之间平移10秒。

  11. 添加另一个“淡入/淡出”动作,将“淡入”值设置为“淡入”,并将“持续时间”设置为2秒。

  12. 创建一个“发送传输信息”的动作,这样雷诺就可以说他完成任务的字幕了。以下是我们设置的选项:


  13. 创建另一个“传输信息”动作,以便移民能够说一些感谢雷诺的话语。以下使我们设置的选项:


  14. 再添加一个“淡入/淡出”动作,将其设置为“淡出”,“持续时间”设置为5秒。

  现在我们就做好一个游戏胜利的电影片段了!


  我们基本上快完工了。最后要做的一件事就是要让我们的电影片段在“Victory”触发器中。

  1. 添加一个“开启或关闭触发器”动作,以便“Victory” 触发器只会运行一次。记住,如果我们不把这个触发器关闭的话,那我们就要一遍又一遍地观看我们的电影片段了。

  2. 添加一个“等待”动作,将“持续时间”设置为5秒,总得在游戏胜利电影片段开始播放之前给玩家一点点回味胜利的时间吧。玩家将可以看到“雷兽”和“坑道虫”单位彻底被打败和死亡,这会提升玩家拥有足够的愉悦感去观看我们接下来的电影。

  3. 添加一个“运行触发器”动作。将“触发器”设置成我们的“Victory Cinematic”触发器,并确保其是设置为“在其结束前等待”。否则游戏会在过场动画播放还未结束之前就关闭了。


  现在,我们的触发器部分的教程完成了。赶紧进入游戏测试我们的地图,杀死怪物,完成两个任务目标,再欣赏我们的游戏胜利电影片段吧。

最新评论

Ocean 发表于 2013-10-19 05:05:39
貌似和厕所3的编辑器差不多啊……为啥就不能搞成像VC++那种面向对象的呢……完全无法理解
herobrine 发表于 2013-10-30 22:08:09
不过好像功能比厕所三的强很多吧

QQ|网站统计|手机版|小黑屋|中国星际RPG联盟    

GMT+8, 2024-11-29 11:55 , Processed in 1.249992 second(s), 25 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表