L4D关卡制作/救援事件(第二部分)
译者:joyo_a(百度ID)
创建一个逃生载具
现在,让我们制作逃生载具。
在求生之路中,四个官方战役各有不同的逃生载具:一架直升机、一艘船、一架飞机和一辆APC装甲车。
逃生载具实际上可以是任何东西。它甚至可以只是一个房间,里面有一个门在救援结束时打开。
在tutorial_standards地图中,一辆地铁车被用作逃生载具,所以你可以看到如何在地图中移动一个对象。
放置一个prop_dynamic
为了让自己的地铁作为逃生载具,你首先需要放置地铁模型。我们要放置一个prop_dynamic而不是一个prop_static,这样它就会移动。
转到Entity Tool并从Objects下拉菜单中选择“prop_dynamic”。
打开其属性,然后点击World model行并点击右边的Browse按钮。
在Filter中输入“subway”并选择模型“props_unique\subwaycar_all_onetexture.mdl”。
点击OK。
关闭属性窗口。
我们现在拥有我们将用于逃生载具的模型。现在我们需要笔刷实体来移动模型。它被称为func_tracktrain。
创建一个func_tracktrain
进入Block Tool。
在顶部视图中,绘制大约与地铁车厢大小相同的笔刷,然后按↵ Enter键创建它。
在侧面或正面视图中,收缩刷子使它刚好在地铁车厢的地板的下方。
在笔刷仍然被选中的情况下,点击Texture栏中的Browse按钮。
在过滤器(Filter)中输入“nodraw”并选择纹理“tools/toolsnodraw”。
双击它使其成为当前纹理。
点击工具栏中的Apply current texture工具将其应用到所选择的笔刷。
在笔刷仍然被选中的情况下,按Ctrl+T。
- 更改Class为“func_tracktrain”。单击应用(Apply)以查看func_tracktrain的属性。
- 更改Name为“train”。
- 更改First Stop Target为“train_track01”。
- 更改Max Speed为“25”。
- 更改Height above track为“0”
切换到Flags选项卡。
- 勾选No User Control复选框。
- 勾选Fixed Orientation复选框。
- 勾选Is unblockable by player复选框。
点击Apply并关闭窗口。
添加path_track实体
现在我们需要创建路径来让地铁移动。
进入Entity Tool并从Objects下拉菜单中选择“path_track”。
在镜头视图中将path_track
放在靠近地铁车厢中央的地方并使用Alt+↵ Enter打开其属性。
更改Name为“train_track01”。
更改Next Stop Target为“train_track02”。
点击Apply并关闭属性窗口。
在侧面或正面视图中,将path_track移动到func_tracktrain
笔刷的正中间。你可以通过点击func_tracktrain
并寻找辅助节点(默认情况下放置在中间位置)来找到此确切位置。你可以移动辅助节点,但请确保path_track
能移动到该辅助节点所在的位置。
回到Entity Tool并放置另一个path_track
到你想让地铁移动到幸存者搭乘的地方。
打开其属性并更改Name为“train_track02”和更改Next Stop Target为“train_track03”。
回到Entity Tool,放置第三个path_track
到你想让地铁移动到可以逃离地图的地方。
打开其属性并更改Name为“train_track03”。
将prop_dynamic关联到func_tracktrain
返回到prop_dynamic
地铁车厢模型并打开其属性。
更改Parent为“train”。这将地铁车厢模型关联到func_tracktrain
。每当func_tracktrain
移动时,地铁车厢模型将随之移动。
现在,我们需要trigger_multiple
来检查所有幸存者是否在地铁上。
创建trigger_multiple
用Block Tool绘制一个笔刷,里面包含在地铁车厢内的用来搭载幸存者的位置。
点击Texture栏中的Browse按钮。
在过滤器(Filter)中输入“trigger”并选择“tools/toolstrigger”纹理。
双击它使其成为当前纹理。
应用纹理到选择的笔刷。
按Ctrl+T使其成为笔刷实体。
更改Class为“trigger_multiple”并点击Apply以显示trigger_multiple
属性。
- 更改Name为“train_trigger”。
- 更改Start Disabled为“Yes”。
- 更改Entire Team Number为“Survivor”。
切换到Flags选项卡。
确保复选框Clients已被勾选。
切换到Outputs选项卡。
添加以下输出:
- My output named:“OnEntireTeamStartTouch”
- Targets entities named:“train_continue_relay”
- Via this input:“Trigger”
当所有幸存者都接触到它时,该触发器将发送一个触发输出到一个名为“train_continue_relay”的logic_relay
。
现在,我们来设置logic_relay
中当幸存者接触该触发器时应该发生的所有东西。
在Entity Tool中,从Objects下拉菜单中选择“logic_relay”。
在镜头视图中将logic_relay
放在“train_trigger”的附近,然后打开其属性。
更改Name为“train_continue_relay”。
切换到Outputs选项卡。
添加以下输出:
- My output named:“OnTrigger”
- Targets entities named:“train”
- Via this input:“StartForward”
添加以下输出:
- My output named:“OnTrigger”
- Targets entities named:“radio”
- Via this input:“FinaleEscapeForceSurvivorPositions”
这意味着,当所有幸存且未倒下的幸存者都接触了“train_trigger”时,地铁将继续向前移动,而logic_relay
也将幸存者传送到安全的位置。
当逃脱发生时,我们需要放置info_survivor_positions到他们将要传送的地方。
放置info_survivor_positions
转到Entity Tool并从Objects下拉菜单中选择“info_survivor_position”。
在镜头视图中放置4个到他们不被感染者阵营接触的地方。
这可能需要你为他们在地图中建立一个小容器,如tutorial_standards.vmf所示。
打开每个属性。
将第一个的Name更改为“train_survivor_pos1”。
将第二个的Name更改为“train_survivor_pos2”。
将第二个的Order更改为“2”。
将第三个的Name更改为“train_survivor_pos3”。
将第三个的Order更改为“3”。
将第四个的Name更改为“train_survivor_pos4”。
将第四个的Order更改为“4”。
完成逃生载具
回到“train_track02”并打开它的属性。
切换到Outputs选项卡。
在tutorial_standards地图里,还有其他输出挂钩到门来打开,如果感染者在路径上他们则被杀死,如果幸存者在路径上则被推开到路径外。现在忽略这些,只需添加以下输出:
添加以下输出:
- My output named:“OnPass”
- Targets entities named:“train”
- Via this input:“Stop”
当地铁到达这个搭载幸存者的地方的path_track
时会停止地铁移动。
添加以下输出:
- My output named:“OnPass”
- Targets entities named:“train_trigger”
- Via this input:“Enable”
这是启用trigger_multiple的输出。
添加以下输出:
- My output named:“OnPass”
- Targets entities named:“radio”
- Via this input:“FinaleEscapeVehicleReadyForSurvivors”
这将告诉幸存者电脑到达标有“RESCUE_VEHICLE”属性的导航区域。
我们还需要向func_tracktrain
发送输入以便从起始位置出发到搭载幸存者的位置。
进入Entity Tool并从Objects拉菜单中选择“logic_relay”。
将其放在“train_continue_relay”实体附近并打开其属性。
更改Name为“train_start_relay”。
切换到Outputs选项卡。
添加以下输出:
- My output named:“OnTrigger”
- Targets entities named:“train”
- Via this input:“StartForward”
点击Apply并关闭属性窗口。
现在,回到trigger_finale
(电台模型)并再次打开它的属性。
添加以下输出:
- My output named:“FinaleEscapeStarted”
- Targets entities named:“train_start_relay”
- Via this input:“Trigger”
当救援的逃脱阶段开始时trigger_finale
会启动地铁。
我们仍然需要一个输出到trigger_finale来告诉它逃脱成功。
转到Entity Tool并从Objects列表中选择“logic_relay”。
在镜头视图中放置它并打开其属性。
更改Name为“train_end_relay”。
切换到Outputs选项卡。
添加以下输出:
- My output named:“OnTrigger”
- Targets entities named:“radio”
- Via this input:“FinaleEscapeFinished”
- After a delay in seconds:“2”
这将告诉trigger_finale
幸存者在被触发之后的2秒内逃脱。
回到“train_continue_relay”并打开其属性。
切换到Outputs选项卡。
添加以下输出:
- My output named:“OnTrigger”
- Targets entities named:“train_end_relay”
- Via this input:“Trigger”
我们可以在这里建立FinaleEscapeFinished
输出,但是我们正在准备为“train_end_relay”添加其他内容。
更新导航
我们现在需要更新导航以包含RESCUE_VEHICLE区域。
按F9保存并编译地图。
当地图加载后,按Page_Down进入导航编辑模式。
使用noclip
N来到达地铁车厢搭载幸存者的地方。你会注意到地铁车厢在起始位置。你不必通过启动救援来让地铁到达搭载的位置。
只需调用控制台并输入“ent_fire train_start_relay trigger
”,然后按↵ Enter。
一旦地铁车厢到达位置,你可以在里面放置一个nav_mark_walkable
并使用nav_generate_incremental
B为其建立导航网格。
确保地铁车厢内的导航区域连接到地图中剩余的区域。
你应该看到连接这些区域的浅蓝色(青色)线。
如果这些区域未连接,请选择要连接的两个区域,然后使用nav_connect
Insert。
选择地铁车厢内的所有导航区域并在控制台中输入“mark RESCUE_VEHICLE
”以标记该属性。
这些都是一个正常工作的救援事件所必要的东西。现在,我们可以为救援事件添加一些可选的元素。