自定义地图首页地图制作教程

触发器模块

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

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

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”动作会判断死亡的单位是不是我们两个任务目标中规定的单位;如果是,那么该任务目标的状态就会被认定为完成。

保存地图!测试吧!

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