新建地形组件

From Valve Developer Community
Jump to: navigation, search
English

总览

首先是设置一个地表地形,然后是添加一个道路路径,最后是添加道路路径和水的过程。

地形组件是VMAPS的一部分,它存在于Hammer中并由地形组件编辑器引用。它们是地形组件系统的DNA。一部分默认的地形组件组已经做为示例来供以分析、重命名/编辑、创建用户自定义的地形组件。

提供的默认地形组件保存在 dota_core/maps/tilesets 路径下。每个地形组件都保存在它自己的VMAP文件中,一个地图可以使用多个地形组件。自定义的地形组件会被单独保存在自定义地图中。


地形组件教程

大纲面板

接下来的部分将会演示地图组件的各个方面以及每个部分是如何与其他部分相交互的。


在Hammer中,打开 radiant_basic 地图组件VMAP文件。该文件可以在 dota_core/maps/tilesets 中找到。


在右侧所示的 Outliner(大纲) 窗口中可以可以看到几个『地形组件』集合,这些集合中包含数个『地形』。举例来说,展开『地面-地形组件(Ground - Tileset)』将会出现单独的地形。

提示

  • 每个地形都在它自己的组建中被简单命名为『地形』。如果需要可以对其重命名。这对地形编辑器没有任何影响。
  • 地形系统是在单独的地形下对geometry, props, proxies等等元素分组来进行分类的。
  • 父类地形是由地形被建立在哪个文件(地面,细节,树木等等)下决定的。
  • 非地面地形可以被其他组,主要是地面地形组引用,用以制作更复杂的程序行为或者组合。


想要知道地形组件是如何组织的,左击『地面-地形组件(Ground - Tileset)』,会看到在"radiant_basic"地图组件中主要场景是由这个集合构成的。


所有的地形都有各种数据嵌入在里面,这些数据会控制地形在地形编辑器中相互之间的交互。

所有这些被选中的地形都是地表地形模组的一个部分。

地表 — 地形组件

组件是所有的地形组件的根组件,它包含了一个地形组件场景的的基础构建材料。它规定了地面组件的高度,轮廓变量,视觉风格和组件碰撞函数的所有可能性。它也规定了与地面接触时的程序触发点,路径、斜坡和水。

基本的地面地形例子
一个未被选中的地面地形。
选中的地形会以橙色高亮显示,并且显示出高度和路径节点。
  • 每个地形由蓝色的边框包住并包含了所有的地形组件类型。
  • 当在 Group 选择模式下,左击 LMB 一个单独的地面地形边框。这个地形边框会变成橙色并且会显示出几个重要的输入项,比如高度和路径节点(在下方)。
  • 如果边框和节点没有显示,按下 Shift+O 以打开可编辑的物体的可视化效果。


高度节点

高度节点会以淡蓝色的小方块出现在被选中的地形上。高度节点规定了每个地形的边缘高度,这个高度决定了各个地形之间的可联通性。

高度节点可以被提高或降低


左键 LMB 拖拽节点使它们从最初的0或者768,提高或者降低128。


当前在任何两个共享同一个地形边缘的地表地形的边缘高度被限制在384。这是为了保证特定的地表地形的变量被控制在一个合理的区间。


路径节点

路径节点以橙色的小方块的形式显示在角落和选中的地形中间。路径节点定义了穿越地形的路径方向,这些节点在视觉上已经被做为非路径地形的路径选择。

在这里被圈出来的 path nodes(路径节点)已经被打开,因此是实心的。注意其它几个关闭的节点。


  • 左击 LMB 路径节点来打开或者关闭它们。


举例说明,一个已经定义了高度和路径节点的 ground tile 上半部分保留了正常地表地形的外观,而下面两个边缘都被标记为路径迫使产生了一个光滑斜面和台阶模型。

代理 (Proxies)

代理是放置在地形上不同位置或嵌套在其他代理上的蓝色问号。代理在可变的情况下,可以随机从分类组加载一个细节的变化。有两种类型的代理, Tile Proxies(地表代理)Group Proxies(组群代理) ,下文会进行说明。

  • 当被选中时, Show Preview 可以在 Object Properties (右下方的横栏)窗口下进行查看,它将使预览标线出现在该实体的原点。
  • 随着被选中的高亮标线(问号下面的小灰色小方块)滚动滑轮来使选中的代理产生任意可用的值。还有在 Object Properties 下,每个代理的可能值是0(不可能)/1(100%)。
一组地形上不同的代理
显示预览选项

地形代理 (Tile Proxies)

地形代理是组群地形中必要的一部分,可以使程序对象有效对准地表不断变化的高度轮廓。他们从具体的地形模组文件中引用地形类别。

在这个例子中,一个具体的地形会被使用到。

  • 在 '地形(Tiles)' 菜单中,选择 '创建一个地形代理(Create Tile Proxy)'。
  • 在 (对象属性)Object Properties 下面 Alt+ Enter ,一个 Tile set 目录将会从列表上方的下拉菜单中被选中(见下图)。
  • 现在,一个具体的地形列表将会被选中。
一个刚刚被创建尚未定义的 Tile set(地形组件) 类型的地形代理。
一旦一个目录被选中,代理会引用它并显示出来。
现在对于被选中的地形类型, Tile set 标签可以显示出特定的选项。
  • 通过 Tile set 下拉菜单中的详细信息,新的区域就可以选取特定的地表类型了。(见右上图)
  • 在编辑器中使用时,所有代理类型都有可能性区域,使它们出现的几率变得更低。
  • shape 字段(见右上侧)是 details 地形代理类型所特有的。它包含了用户可定义 Values(值) 的种类。
  • 关于创建这些 Values 的种类更多的信息,参考 细节-地形组件(下方)


形状(Shapes)是程序化群组的组合,加上用户自定义的、虚影几何形状(通常从复制的地表地形的高度轮廓做为参考), 并且允许地形代理沿墙壁或内外拐角进行精确配对。它们可以自定义分类和布局规则,以使它们灵活得适应的定制地表轮廓的需要。

地形代理源可以定义为已经分好类别的地形排列,其中包含了物体、其他代理以及引用自网格虚化图片(见左下方)。
在此放置的地形代理引用的是图片左侧的类型。这是一个虚化体积被用来配合具有特定地表的的范例。

群组代理

组代理对于载入不同的单独对象,或者单个对象组群(来自一个大的组群)时非常有用。

  • 选中一组特定的对象,按下 Ctrl+G 来对它们编组,然后当这些群组被选中时,从左上方的地形菜单中选择「创建群组代理 (Create Group Proxy)」。
  • 一旦被创建,这个实体可以被放置,在地形下编组,或者被复制到其他地形中。
八条鱼被分在一个群组代理下,这个代理会完全随机得选择中一个或者基于概率选中它们之一。

细节 — 地形组件

details - tileset(细节-地形组件) 文件夹被用来归类其他地形(如地面,树木等等)衍生出来的地形。Detail tile 代理引用环境道具进行创建,以对齐悬崖边,树根等地形。

Categories can be added or removed with the properties tab.


在上面的图片中, radiant_basic 地形组件中有一个被定义了的 shape Property(左侧的变量),它包含了地形代理组不同的值(右侧变量)。

  • Shape 含了不同的 Values (群)以进行复用,并且由此共享虚影几何来做为引用。
  • Shape 的值可以通过 Tile Set Properties 标签进行添加或编辑,通过左击 LMB details - Tileset (在Hammer右上方的Outliner里)并且按下 Alt+ Enter。(如上图)
  • 通过标签右下方的 Add Value+Remove Value 按钮来编辑 Values (移除这些值会中断所有地形分配之间的联系)
  • Value 条目可以通过双击来重命名。(重命名会使引用这些的地形自动更新)


Categories can be added or removed with the properties tab.


最重要的,一旦 Valuesdetails-Tilesets 组中的 Tile Set Properties 标签被编辑,它们就可以在 details-Tileset 下被分配到单独的地形中。

树木 — 地形组件

Trees - tileset(树木-地形组件) 包含了树木的特殊地形,这种地形与细节地形(地形代理)在结构上相似。这些不能被引用到其他地形上,因为它们通过地形编辑器的树木工具被涂到地图上。

Tileset new trees properties type.png
Tileset new trees properties size.png

在上面的图片中, Trees - Tileset 有定义 类型(type)大小(size) 属性(左侧字段),其中每个都包含不同的值(右侧字段)。在地形编辑器中编辑树木, 大小(size)类型(type) 将被一起使用。于是在 pine_summer 中就有了一个small/medium/large(小/中/大)的不同类别版本的树木。

  • Values 可以通过在数值标签下,左击 LMB Trees - Tileset,并且按下 Alt+ Enter 来进行添加或编辑。
  • 通过在右下侧标签上的 Add Value+Remove Value 两个按钮来编辑 Values (移除value将会使与之关联的地形断开)
  • Value 条目可以通过双击来重命名。(重命名它们会使所有引用它们的地形自动更新)
Tileset new trees type size assign.png

最重要的,一旦 valuesTrees-Tileset 组下的 Tile Set Properties 标签中被编辑,它们就可以在 Trees-Tileset 下被分配到单独的地形中。

树木细节

这个文件夹是用户自定义的,在地形系统中也没有对应某个特别的角色,当在任意地形场景中,不希望让non-grouped(非组合)的元素把大纲弄乱时,不同的用户都定义这样的文件夹。 在 radiant basic 地形组件中,它仅仅是为了将树木地形中,被做为代理的元素组织起来。

植物 — 地形组件

Plants - tileset(植物-地形组件) 包含植物和岩石地形,它们与是在结构上与细节地形(地形代理)相似。这些不必被引用到其他地形上,因为它们通过地形编辑器的灌木笔刷工具被涂到地图上。

Tileset new plants properties type.png
Tileset new plants properties water.png

在上面的图片中, Plants - Tileset 中定义了 typewater 属性(左侧字段),其中每个都包含了不同的 Values(数值) (右侧字段)。对于地形编辑器中的树木表现形式, typewater 会被一起使用。因此会有 sparse / moderate / thick(稀疏/中/粗) 等不同版本的植物,它们或是被正常使用或被设置在水中。

  • 数值(Values) 可以通过左击LMB Tile Set properties 标签中的 Plants - Tileset,并且按下 Alt+ Enter
  • 数值 可以通过在数值标签下, Add Value+Remove Value 来进行添加或移除。(移除数值将会断开所有相关关联)
  • 数值 条目可以通过双击来重命名。(重命名它们会使所有引用它们的地形自动更新)


Tileset new plants type water assign.png


如上,一旦编辑 Plants-Tileset 组的 Tile Set Properties标签下的属性或数值,它们就可以在 Plants-Tileset 下被分配到单独的地形中。

植物细节

这个文件夹是用户自定义的,在地形系统中也没有对应某个特别的角色,当在任意地形场景中,不希望让non-grouped(非组合)的元素把大纲弄乱时,不同的用户都定义这样的文件夹。 在 radiant basic 地形组件中,它仅仅是为了将植物地形中,被做为代理的元素组织起来。

道具 — 地形组件

Props - Tileset 被用来归类prop地形。由于使用的是prop tool来将地形组件被放置在编辑器中,所以Prop地形不被其他地形工具引用。


Categories can be added or removed with the properties tab.


在上面的图片中,Props中定义了 type Property (左侧字段),其中每个都包含了不同的 Values (右侧字段)。

  • 数值可以通过左击LMB details - Tileset中的属性标签编辑,并且按下Alt+ Enter.
  • 数值 可以通过在数值标签下, Add Value+Remove Value 来进行添加或移除。(移除数值将会断开所有相关关联)
  • 数值条目可以通过双击来重命名。(重命名它们会使所有引用它们的地形自动更新)


Tileset new props properties type assign.png


如上图所示,当数值在Props-Tileset 组的选项卡 Tile Set Properties 中被编辑过,它们就可以在 Props-Tileset 下被分配给单独的地形。