L4D关卡制作/救援事件(第二部分)

From Valve Developer Community
Jump to: navigation, search
English (en)русский (ru)中文 (zh)
... Icon-Important.png

译者:joyo_a(百度ID)

创建一个逃生载具

现在,让我们制作逃生载具。

在求生之路中,四个官方战役各有不同的逃生载具:一架直升机、一艘船、一架飞机和一辆APC装甲车。

逃生载具实际上可以是任何东西。它甚至可以只是一个房间,里面有一个门在救援结束时打开。

在tutorial_standards地图中,一辆地铁车被用作逃生载具,所以你可以看到如何在地图中移动一个对象。

在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键创建它。

侧面正面视图中,收缩刷子使它刚好在地铁车厢的地板的下方。

tools/toolsnodraw纹理。

在笔刷仍然被选中的情况下,点击Texture栏中的Browse按钮。

在过滤器(Filter)中输入“nodraw”并选择纹理“tools/toolsnodraw”。

双击它使其成为当前纹理。

点击工具栏中的Apply current texture工具将其应用到所选择的笔刷。

func_tracktrain属性。

在笔刷仍然被选中的情况下,按Ctrl+T

  • 更改Class为“func_tracktrain”。单击应用(Apply)以查看func_tracktrain的属性。
  • 更改Name为“train”。
  • 更改First Stop Target为“train_track01”。
  • 更改Max Speed为“25”。
  • 更改Height above track为“0”
func_tracktrain的Flags选项卡。

切换到Flags选项卡。

  • 勾选No User Control复选框。
  • 勾选Fixed Orientation复选框。
  • 勾选Is unblockable by player复选框。

点击Apply并关闭窗口。

添加path_track实体

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属性。

返回到prop_dynamic地铁车厢模型并打开其属性。

更改Parent为“train”。这将地铁车厢模型关联到func_tracktrain。每当func_tracktrain移动时,地铁车厢模型将随之移动。

现在,我们需要trigger_multiple来检查所有幸存者是否在地铁上。

创建trigger_multiple

创建一个trigger_multiple笔刷。

Block Tool绘制一个笔刷,里面包含在地铁车厢内的用来搭载幸存者的位置。

“tools/toolstrigger”纹理。

点击Texture栏中的Browse按钮。

在过滤器(Filter)中输入“trigger”并选择“tools/toolstrigger”纹理。

双击它使其成为当前纹理。

应用纹理到选择的笔刷。

trigger_multiple属性。

Ctrl+T使其成为笔刷实体。

更改Class为“trigger_multiple”并点击Apply以显示trigger_multiple属性。

  • 更改Name为“train_trigger”。
  • 更改Start Disabled为“Yes”。
  • 更改Entire Team Number为“Survivor”。
Note.pngNote:该触发器一开始被禁用以便幸存者在地铁车厢搭载他们之前不能触发它。我们稍后会启用它。
trigger_multiple的Flags选项卡。

切换到Flags选项卡。

确保复选框Clients已被勾选。

trigger_multiple的Outputs选项卡。

切换到Outputs选项卡。

添加以下输出:

  • My output named:“OnEntireTeamStartTouch”
  • Targets entities named:“train_continue_relay”
  • Via this input:“Trigger”

当所有幸存者都接触到它时,该触发器将发送一个触发输出到一个名为“train_continue_relay”的logic_relay

现在,我们来设置logic_relay中当幸存者接触该触发器时应该发生的所有东西。

继续地铁的logic_relay属性。

Entity Tool中,从Objects下拉菜单中选择“logic_relay”。

镜头视图中将logic_relay放在“train_trigger”的附近,然后打开其属性。

更改Name为“train_continue_relay”。

train_continue_relay的Outputs选项卡。

切换到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

为逃生载具放置info_survivor_positions。

转到Entity Tool并从Objects下拉菜单中选择“info_survivor_position”。

在镜头视图中放置4个到他们不被感染者阵营接触的地方。

这可能需要你为他们在地图中建立一个小容器,如tutorial_standards.vmf所示。

逃生载具的info_survivor_position属性。

打开每个属性。

将第一个的Name更改为“train_survivor_pos1”。

将第二个的Name更改为“train_survivor_pos2”。

将第二个的Order更改为“2”。

将第三个的Name更改为“train_survivor_pos3”。

将第三个的Order更改为“3”。

将第四个的Name更改为“train_survivor_pos4”。

将第四个的Order更改为“4”。

完成逃生载具

train_track02 path_track的Outputs选项卡。

回到“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”属性的导航区域。

创建一个logic_relay让地铁出发。

我们还需要向func_tracktrain发送输入以便从起始位置出发到搭载幸存者的位置。

进入Entity Tool并从Objects拉菜单中选择“logic_relay”。

将其放在“train_continue_relay”实体附近并打开其属性。

train_start_relay的Outputs选项卡。

更改Name为“train_start_relay”。

切换到Outputs选项卡。

添加以下输出:

  • My output named:“OnTrigger”
  • Targets entities named:“train”
  • Via this input:“StartForward”

点击Apply并关闭属性窗口。

现在,回到trigger_finale(电台模型)并再次打开它的属性。

向trigger_finale添加输出。

添加以下输出:

  • My output named:“FinaleEscapeStarted”
  • Targets entities named:“train_start_relay”
  • Via this input:“Trigger”

当救援的逃脱阶段开始时trigger_finale会启动地铁。

我们仍然需要一个输出到trigger_finale来告诉它逃脱成功。

创建一个logic_relay来让地铁逃离。

转到Entity Tool并从Objects列表中选择“logic_relay”。

镜头视图中放置它并打开其属性。

更改Name为“train_end_relay”。

train_end_relay的Outputs选项卡。

切换到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选项卡。

回到“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为其建立导航网格。

确保地铁车厢内的导航区域连接到地图中剩余的区域。

你应该看到连接这些区域的浅蓝色(青色)线。

Note.pngNote:区域可以单向连接和双向连接。浅蓝色线意味着它是双向连接。深蓝色意味着它是单向连接。

如果这些区域未连接,请选择要连接的两个区域,然后使用nav_connect Insert

Tip.pngTip:如果要在区域之间建立单向连接,则选择第一个区域,然后指向(而不是选择)第二个区域并执行“nav_connect”。这用于一些东西如单向下降。

选择地铁车厢内的所有导航区域并在控制台中输入“mark RESCUE_VEHICLE”以标记该属性。

这些都是一个正常工作的救援事件所必要的东西。现在,我们可以为救援事件添加一些可选的元素。