L4D Level Design/Nav Meshes/zh

From Valve Developer Community
Jump to: navigation, search

译者:joyo_a(百度ID)

接下来我们将为我们的地图创建“导航网格”,又叫“Nav网格”。导航网格代表地图的“可步行区域”。这允许幸存者电脑和感染者“知道”如何在环境中移动,并告诉AI‘导演’可以在哪个地方产生感染者。

创建tutorial04.vmf并编译

在Hammer里,打开你在上一个教程创建的地图文件tutorial03.vmf(如果你还没有打开)。默认情况下,它应位于教程mapsrc文件夹中:

C:\Program Files\Steam\steamapps\common\left 4 dead\sdk_content\mapsrc\

现在我们将建立一个新版本来制作并编译它:

  • 转到File菜单并选择Save As...
  • 更改名字为tutorial04.vmf
  • F9打开Run Map对话框并点击OK按钮以编译地图。

准备开始

当地图加载完后:

  1. 像之前一样,我们会看到一个“Map is unplayable”对话框,因为我们还没有导航网格。按下Continue按钮来关闭该对话框。
  2. 调出你的开发人员控制台`(波浪号)
  3. 输入“director_stop”并按下 Enter键。
    这样AI导演将停止产生感染者。
  4. 键入命令“nb_delete_all”并按下 Enter
    这将从当前游戏中删除任何感染者和幸存者电脑。
  5. 键入命令“nav_edit 1”并按下 Enter
    这将使游戏切换到导航网格编辑模式。
  6. 使用`再次隐藏控制台。

生成新的导航网格

放置一个nav_mark_walkable。

关闭控制台,看看在两个房间之间的走廊中间的地板。

打开控制台输入“nav_mark_walkable”并按下 Enter.

关闭控制台,你应该在你指向的地面上看到一个金字塔状的形状。

你刚刚放置了一个名为“nav_mark_walkable”的导航生成标记。

导航区域自动生成。

再次打开控制台输入“nav_generate_incremental”并按下 Enter

这将在nav_mark_walkable标记周围生成一组导航区域。导航网格区域显示为一系列连接的方块。它应该在整个两个房间的水平面上。

Note.png注意:如果你有一个更大的地图,你需要在整个地图中放置更多的nav_mark_walkable标记。每个nav_mark_walkable在其创建区域周围都有一个半径范围。一般来说,一次为一个部分创建导航区域,以保持导航网格简洁。
Tip.png提示:在运行nav_generate_incremental时会自动将导航网格保存到地图中。如果要手动保存进度,可以使用“nav_save”命令。

导航区域选择

运行nav_generate_incremental后,其创建的所有新导航区域保持选中状态。如果你犯了一个错误,想要再次运行命令,这将派上用场。要删除所选导航,请在控制台中输入命令“nav_delete”,这将删除所有选定的导航区域。如果你尝试这样做,你可以通过简单地放置另一个nav_mark_walkable标记并再次运行nav_generate_incremental来重新创建导航区域。

  • 要取消选择导航,请键入“nav_clear_selected_set”。
  • 要选择导航区域,用光标指向该区域并键入“nav_toggle_in_selected_set”。这将选择你指向的导航区域。

导航设置文件

正如你所知道的,编辑导航网格使用了很多控制台命令。编辑的最有效率的方法是,不是每次都输入控制台命令,而是绑定这些命令以用作快捷方式。

本教程已包含一个使其更容易开始的配置(.cfg)文件。

调出控制台并输入:

bind PGDN "exec nav_mode"

然后按下 Enter

现在按Page Down键将在“导航编辑”模式和“游戏”模式之间切换。

绑定你自己的键(高级)

要使用bind命令设置你自己的绑定键,请调出控制台并键入:

bind <key> "console command"

例如,如果要将Z键绑定到“nav_toggle_in_selected_set”,在控制台中输入:

bind z "nav_toggle_in_selected_set"

你可能需要在文本编辑器中打开left4dead/cfg/nav_mode.cfg文件以添加或更改绑定键。

  • 有关绑定命令到键的详细信息,请参阅Bind
Note.png注意:从现在开始,本教程将假设你使用默认的nav_mode.cfg。如果你使用自己的绑定键,你必须用你自己的绑定键替换原来给定的键。

拆分导航区域

你还会注意到,你的地图中的导航网格当前有大面积覆盖整个房间。有时,有必要将这些大区域分成较小的区域。例如,如果你想在一个区域添加一个属性,如幸存者开始的地方,而你想要的区域就在有武器的桌子的前面。

你可以使用“nav_split”切割导航区域。

白线预览了你可以做的切割。

在本教程包含的nav_mode.cfg文件中,nav_split绑定到Insert键。

当你指向导航区域时,你将看到一条白线,这条白线通过你的光标向北/南或东/西移动。定位光标,使得线条绘制在你创建的第一个房间中的有武器的桌子的右侧。

如果你使用nav_split,这条线会显示即将发生切割的位置。

执行nav_split。

Insert执行切割。

沿另一个方向切割导航区域。

现在,定位光标,使刚刚在有武器的桌子前切割的新区域在另一个方向上分成两半。

Insert执行切割并观察结果。

添加属性

导航区域可以包含指定特定目的的属性。例如,标记有属性“EMPTY”的导航区域意味着普通感染者不能在其区域上生成。比方说,你的厨房里有一个柜台,当玩家到那里时,你不想要感染者站在柜台上,因为这样看起来很奇怪。你可以将此区域标记为“EMPTY”。

首先,输入“z_debug 1”命令允许查看属性。

在我们创建的第一个导航网格中,我们需要指定幸存者在地图中出现时要开始的位置。让我们将标记在有武器的桌子前面的那个我们刚刚分割的区域为“PLAYER_START”。

将光标指向有武器的桌子前面的区域并按Z键使用“nav_toggle_in_selected_set”。

使用nav_toggle_in_selected_set以选择导航区域。

现在调出控制台并输入“mark PLAYER_START”,然后按 Enter

使用PLAYER_START属性标记导航区域。

这将把选定区域转换为幸存者的玩家开始位置。它应该变成紫色。

Tip.png提示:如果你使用属性标记一个区域,并希望以后将其删除,请选择该区域,并在控制台中使用“clear_attribute <attribute name>”将其删除。例如:clear_attribute PLAYER_START

求生之路需要有特定的导航区域在它的地图里面才能使导演系统能够正常工作。对于这个简单的测试地图,我们将使用另一个称为“FINALE”的属性。

步行到这个地图的第二个房间,看向占据整个房间的区域,然后按Z键选择这个区域。

在第二个房间中选择导航区域。

调出控制台并输入“mark FINALE”,然后按 Enter

使用FINALE属性标记导航区域。

这将把这个房间变成一个终点区域,它会变成蓝色。

现在,这个地图已经满足了导演的正常工作需要。导演可以创建从起点到目的地点的“流”。

为了使地图稍微更具可玩性,让我们将玩家开始区域周围的区域标记为“EMPTY”,以便玩家不会在进入地图后被团团围住。

使用Z键选择玩家开始区域周围的所有区域。

选择第一个房间中除了PLAYER_START区域之外的导航区域。

调出控制台并输入“mark EMPTY”,然后按 Enter

使用EMPTY属性标记选定区域。

这将在地图开始时阻止“漫游”的普通感染者出现在这些区域。

Note.png注意:它不会阻止之后在这些区域产生怪物。你需要为其添加属性“NO_MOBS”。

使用“nav_save”保存导航网格。

删除导航区域

如果你犯了一个错误,或者你发现导航网格的自动生成有错误,你可以使用命令“nav_delete”删除导航区域。例如,有武器的桌子实际上不需要有个导航区域在其顶部。它可能会导致幸存者跳到它上面,这可能是我们不希望的。

在提供的配置文件中,此命令已绑定到Delete键。

要删除导航区域,请指向它,使用Z键选择它。确保你仅选择要删除的区域,然后按Delete

分析导航网格

你在游戏中的第一个导航网格。

现在我们有一个基本的导航网格,我们需要游戏来分析它,以便导演知道可以产生感染者的地方。

调出控制台并输入“nav_analyze”,然后按 Enter

这可能需要几秒钟,然后地图将重新加载。

要测试生成的感染者,请在控制台中使用“director_start”,并使用“map tutorial04”重新加载地图。

你的场景现在应该看起来像这样。

添加导航到梯子

如果你在游戏中打开tutorial03地图,并切换到nav_edit 1,你会看到看见梯子的方向上有导航网格。

在梯子上创建导航。

要在func_ladder上创建导航,请在导航编辑模式下将光标置于其上,并使用“nav_build_ladder”。

Note.png注意:如果光标位于func_ladder上,它将变为绿色。

连接导航区域

虽然当你使用nav_generate_incremental时,许多导航区域将正确连接,但有些可能需要调整或更改。例如,我们在tutorial03地图创建的伸展台可能没有正确连接到它下面的区域。

连接导航区域。

要连接2个导航区域,请选择它们,然后在控制台中使用“nav_connect”。在nav_mode.cfg文件中一般都将End键绑定到这个命令。

这将连接两个方向的区域,并形成浅蓝色线,如图所示。感染者可以爬上(他们可以爬到任何高度为180单位或更低的区域),他们可以爬下。电脑幸存者也可以跳下去。

要单向连接2个区域,你需要选择一个你想要能够连接到另一个区域的区域,然后用光标指向第二个区域,但不要选择它。然后,按End以使用“nav_connect”。

确保在这两种情况下,您要连接的两个区域不重叠。这将导致感染者在试图爬上去的时候撞头。

绘制你自己的导航区域

nav_generate_incremental有时会忽略你想要有导航的区域。在这些情况下,你将需要绘制你自己的导航区域。

绘制导航区域用2个键完成。一个键绑定到“nav_begin_area”,其他键绑定到“nav_end_area”。nav.cfg文件已经将“nav_begin_area”绑定到鼠标左键,而“nav_end_area”也绑定到鼠标右键

指向要创建导航区域的区域,然后单击鼠标左键。当你移动鼠标时,你可以看到导航区域将绘制的位置,直到你按下鼠标右键结束绘制并创建区域。

绘制一个导航区域。

单击鼠标右键激活nav_end_area并观察结果。

Note.png注意:创建自己的导航区域不会自动将它们连接到导航网格的其余部分。使用nav_connect将它们连接到相邻区域。
Tip.png提示:如果当你不想绘制导航区域时不小心按下鼠标左键,只需再次按下鼠标左键,它将取消导航创建。

绘制导航时对齐网格

你可能会注意到,当你处于绘制模式时,光标不会对齐到网格。你可以使用控制台中的“nav_snap_to_grid”来设置对齐属性。

Tip.png提示:nav.cfg中,F9键绑定到“incrementvar nav_snap_to_grid 0 2 1”。这将在你按下绑定键时更改网格大小,并在每次按F9键时继续切换大小。

也可以使用nav_begin_areanav_end area来绘制梯子。只需指向梯子的一角,垂直移动光标即可到达对角。