创建一个gm flatgrass

# 创建一个 gm\_flatgrass

简介
--

在开始之前，请先查看此处：创建地图

本教程的目的是让你进入 Hammer 并开始创作一些内容，在本例中，我们将逐步复刻 gm\_flatgrass 这个地图。

如需更多关于 Source 2 地图制作的文档和教程，请参阅其他教程。

*注意：本教程使用的 Hammer 版本是包含在《半条命：爱莉克斯》中的版本。*

## 了解工具

如果你计划上传你的地图，请按照创建地图来创建你的地图。

或者

'File' > 'New' (CTRL + N) 打开一个新地图，然后 'File' > 'Save' (CTRL + S) 保存为 gm\_flatgrass。（这可能会导致编译器提示 vmap 不在你创建的插件中。）

### 选择模式

从左到右，我们将使用以下模式：边 Edges (快捷键2)，面 Faces (快捷键3)，对象 Objects (快捷键5)

要创建此地图，必须用到这三种选择模式，你可以通过按数字键快速切换。

在选择了选择模式 (Selection Mode)后，你还可以选择要使用的工具 (Tools)。

### 工具

你可以在左侧找到工具，在本指南中我们将使用以下工具：

也可参考：https://files.facepunch.com/wiki/files/314/8d90a83c8940111.png

### 其他

对我们在本指南中将使用的其它所有工具进行快速介绍。我建议你观看这个视频教程来帮助理解界面布局。

* **对象编辑 (Object Editing)：**根据**工具**和**选择模**式的不同，这一部分将有不同的选项与所选几何体进行交互和修改。
* **编译和播放 (Compile & Play)：**打开编译工具来运行你的地图，在工作过程中使用“快速编译 (Fast Compile)”。
* **2D 视图 (2D Viewport)：**显示地图的正交视图，你可以从任意方向查看。你可以通过按 Top (F2)、Front (F3)、Side (F4) 来切换视图。
* **资产窗口 (Assets Window)：**道具、材质、预制件等等……你可以在运行创意工坊工具时从资产浏览器中拖放这些资产。
* **对象属性 (Object Properties)：**选择对象或点实体后，你可以修改它的比例、位置、旋转以及可能的其它属性。
* **网格设置 (Grid Settings)：**在移动或调整对象时，它将与你选择的最小单位对齐。我们大部分时候会使用 64、32、16 和 8 个单位。

按 W A S D 键在视图中移动相机，在视图中滚动鼠标滚轮进行缩放，按住右键进行旋转。

## 逐步制作地图

第 1 步：

使用几何工具 (⇧ SHIFT + B)，在**对象编辑窗口 (Objcet Editing Window)**中选择 **Quad**，创建一个尺寸为 2048x2048 个单位的平面。地图越大，编译所需的时间越长，所以暂时保持较小的尺寸，待完成后再放大。

你可以使用对象属性来使平面居中在 X: 0；Y: 0。

第 2 步：

使用实体工具 (⇧ SHIFT + E) 在对象编辑窗口中放置 Player Start、Sky 和 Environment Light。确保使用旋转工具 (R) 将灯光的箭头朝下。

第 2.5 步：

在平面上添加一层草纹理，进行快速编译，如果你只是想要一个平坦的草地，那么你已经完成了教程。

第 3 步：

使用块工具 (⇧ SHIFT + B)，在对象编辑窗口中选择 Cylinder，创建一个直径为 512x512 个单位，边数为 64 的圆柱体，并将其放置在中心位置。

第 4 步：

使用裁剪工具 (⇧ SHIFT + X) 并在 2D 视图中工作，按 ENTER 键确认将圆柱体切割成两半，然后再切成四分之一。

在对象编辑窗口中记得选择第三种 Keep Mode。

第 5 步：

在对象选择模式 (5) 下使用移动工具 (T) 将两个相邻部分分开相同的距离。

第 6 步：

在边选择模式 (2) 下使用选择工具 (⇧ SHIFT + S) ，选择所有相邻的缺少侧面的所有边。要同时选择多个边，可以按住 ⇧ SHIFT 键并点击边缘。

在你选择的所有边缘后，像图片中那样用桥接工具 (B) 连接它们，然后通过对象编辑窗口选择 only 1 Step (仅生成一个平面) 然后按 ENTER 确认。

在另一侧重复相同操作。

第 7 步：

通过双击，或在对象编辑窗口中选择一个边后，使用 **选择循环** **Select Loop** (L) 来选择剩余无面的一侧的边缘。

使用填充洞 (P) 来覆盖面，然后在另一侧重复相同操作。

第 8 步：

在对象选择模式 (5) 下选择两个底座，使用选择工具 (⇧ SHIFT + S) 将它们拉高，箭头朝上。

第 9 步：

使用移动工具 (T) 并按住 ⇧ SHIFT，将两个底座上下移动以复制它们。

我们将用复制的底座来创建分隔两个混凝土板，分开底座。

第 10 步：

在对象选择模式 (5) 下选择两个混凝土板，使用选择工具 (⇧ SHIFT + S) 将它们缩短，箭头朝下。我建议将网格的大小设置为更小的值，比如 16。

使用移动工具 (T)，利用 2D 视图，将混凝土板放在底座上。

在选择一个混凝土板的同时，稍微地使它们的每一侧变大，让它们凸出一点。

第 11 步：

使用移动工具 (T) 并按住 ⇧ SHIFT，将底座上下移动以复制它们。逐个调整这些新的顶座，使它们变短，并使其每一侧略微变薄，以凸出混凝土板的悬檐。

在面选择模式 (3) 下选择顶部基础的内部 2 个面并删除它们。

这些砖块底座将有一个连接它们的宽拱门。

第 12 步：

使用几何工具 (⇧ SHIFT + B) 创建一个具有 32 个面的圆柱体，宽度与顶部基础的高度相同 (我这是 160 个单位)。

使用 2D 视图的帮助，旋转 (R) 圆柱体 90°，并将其放置在两个顶座的中心位置。

使用选择工具 (⇧ SHIFT + S) 调整圆柱体的大小，使其与顶部基础的宽度完全相同。

第 13 步：

在使用2D视图和面选择模式 (3) 的情况下，选择圆柱体的底半部，并使用删除 (DEL) 删除它。

同时删除 (DEL) 前面和后面的面。

第 14 步：

在对象选择模式 (5) 下选择半圆柱体，然后使用翻转面 (F)。

第 15 步：

使用裁剪工具 (⇧ SHIFT + X)，将对象切成两半，并借助 2D 视图将它们移动到靠近顶座和混凝土板的位置，如图所示。

在这一步中，你可能需要降低网格的大小，我使用了 8。

第 16 步：

在边选择模式 (2) 下，选择弧的上部对面的边，并用桥接 (ALT + B) 将它们连接起来。

第 17 步：

在边选择模式 (2) 下，选择顶部基础的上部边并用桥接 (ALT + B) 将它们连接在一起。

在对象选择模式 (5) 下，选择顶部基础和两个拱门并将它们合并 (M) 到一起。(提醒：按住 ⇧ SHIFT 键选择多个对象)

第 18 步：

在边选择模式中，选择属于缺失面的边之一，使用选择环 (L) 或双击来包含所有这些边。

使用填充洞 (P) 来创建填补的面，然后在另一侧重复相同操作。

第 18.1 步：

第 18 步将创建一个称为“ngon”的多边形，3D 建模师通常不建议使用它，因为它可能会导致光照、碰撞和细分的问题。虽然没有证据表明在 Source 2 中使用平面的 ngon 会导致任何问题，但我们将展示如何解决这个问题。如果你不在乎别人对你和你的地图制作技巧的看法，你可以跳过这一步。

为了帮助可视化所有顶点的位置，我们需要切换网格细分视图 (CTRL + ⇧ SHIFT + F6)。

第 18.2 步：

在顶点选择模式 (1) 下，选择顶部顶点中的一个以及两个相邻的底部顶点。(按住 ⇧ SHIFT 键可以同时选择多个点)

连接 (V) 它们在一起，这将创建一个只有 3 条边的新面。

第 18.3 步：

这里有一个视频来展示这个过程，如果你手速快而稳定，所有操作都可以在不到 2 分钟内完成。

你可以在**边选择模式 (2)** 下检查并对比网格。

第 19 步：

用移动工具 (T) 在对象选择模式 (5) 下复制前两个混凝土板，并将它们放在砖块顶座上。

在面选择模式 (3) 下选择两个内部面，并删除它们，然后在边选择模式 (2) 下选择缺失面的所有边，并将它们桥接 (ALT+B) 在一起。

第 20 步：

从资产浏览器拖放一些纹理，调整草地平面的大小并进行快速编译以查看你的地图！

注意：

* 如果你收到关于 (map path) is outside of the directory required for game content: 的错误，请查看：创建地图。
* 如果你的电脑使用的是带有 efficiency Cores 的 CPU，在某些情况下 Windows 可能只会使用 efficiency Cores 来编译。要解决这个问题，请打开你的任务管理器>详细信息，选择 sandbox\_dev 和 vrad3，右键点击>设置关联，然后选择除了efficiency Cores 以外的所有 CPU 核心 (通常最后几个是 efficiency Cores)。

结果
--

这可能看起来像是一个简化版的 gm\_flatgrass，但你在这里学到的是 Hammer 的基本操作。

译者:凯凯=v=