# 爬梯 ## 概览和结构 在**daNetGame**项目中,有一种攀爬垂直(或接近垂直)梯子的技术。 作为游戏的一部分(玩家可以攀爬)的垂直梯子实际上是复合物体。它们由两个部分组成: 1. 视觉几何 (`*.dag`) 2. 游戏对象 (`*ladder.gameObj.blk`). ```{note} `.blk`文件的名称必须遵循 `ladder`后缀和 `*.gameObj.blk`扩展名的惯例。 ``` ### 几何参数 可视几何图形没有什么特别之处--一切都是标准而简单的。它只是一个有特定阶数的梯子模型(阶数很重要,因为它将用于游戏对象中)。 ```{important} 唯一需要注意的关键点是,台阶的间距必须均匀。 否则,在攀爬过程中,角色的手脚可能无法正确对准台阶。 ``` #### 游戏对象参数 游戏对象(gameObj)是一个程序化生成的对象(类似于**wall_holes**、**indoor walls**等)。要创建它,您需要生成一个包含梯子描述的文本文件(`*ladder.gameObj.blk`): - `volumeType:t="box"` – 生成的游戏区域的几何类型,类似于碰撞中的网格、方框、凸形。我们特别使用了 `box` 类型。 - `boxSz:r=0.5` – 定义方块中心到任意边的距离。 该值代表立方体边长的一半,也就是说,默认值 `0.5`会生成一个 1 米的立方体。默认设置为 `0.5`,我们不会更改。它的影响微乎其微,因为盒子的大小随后将由复合对象中的矩阵定义(因为梯子的形状不是立方体)。 - `isLadder:b=yes` – 指定该游戏对象是一个梯子。 - `ladderStepsCount:i=14` – 阶数(这一点很重要,因为它会影响角色手脚在实际梯子几何图形上的位置)。 游戏对象的实际尺寸是通过其矩阵在复合对象中确定的,该矩阵将视觉几何图形与游戏对象整合在一起。这样,游戏对象就能与特定梯子所需的比例相匹配。 ## 创建阶梯游戏对象 ### 一般指南 1. 您不一定需要创建一个新的游戏对象。您可以重新使用现有的对象,只需在复合对象中对其进行转换,使其适合您的梯子即可。 ```{note} 不过,请务必记住,游戏对象包含预定义的梯级数,不得更改。更改它将会破坏已使用该对象的梯子。如果阶数不符合您的需要,请创建一个新对象。 ``` 2. 避免修改默认立方体尺寸(`boxSz:r=0.5`,即每边 1 米)。如果出于某种原因决定更改该值,则必须确保在 *3ds Max* 中创建复合对象时对尺寸进行相应调整(如下所述)。否则,**3ds Max** 和 [*Asset Viewer*](../../../dagor-tools/asset-viewer/asset-viewer/asset_viewer.md) 中的结果将不一致。 3. 梯子是独立的物体还是建筑物的一部分并不重要,每种情况都是独一无二的。如果一个梯子被多次使用,那么将其作为一个单独的对象会更合理。如果梯子是特定建筑物的独有物件,则可以保留为建筑物几何体的一部分(考虑优化、LOD 等)。 技术保持不变--每个梯子都必须通过复合对象添加一个游戏对象。 4. 最好将`*ladder.gameObj.blk`与可视几何图形一起存储。 5. 除非游戏需要,否则请避免在物理系统中的每一步都添加碰撞。物理碰撞不会与攀爬动画产生交互作用--它只会与胶囊发生碰撞。 6. 游戏对象的跨度应**从下台阶到上台阶**。 否则,可能会出现手脚位置不正确的情况。 下面是一个使用 `wood_ladder_a` 模型的示例: ```{note} 截至 2023 年 7 月,系统设置为**角色只能从游戏对象的 X 侧**攀爬。从其他面攀爬可能不起作用,或行为不正确。 --- ``` #### 创建游戏对象的方法 #### 方法 1 1. 在 **3ds Max** 场景中,创建一个尺寸为 1x1x1m 的立方体,其支点位于中心。如果更改了 `boxSz:r=0.5` 的大小,则需要相应调整立方体的大小。 2. 缩放立方体,使其与梯子的尺寸一致。 3. 使用可用工具导出复合对象(梯子 + 游戏对象)(例如 [*dag2rires*](../../../dagor-tools/dag2rires/dag2rires.md))。 --- #### 方法 2 1. 在 [*daEditor*](../../../dagor-tools/daeditor/daeditor/daeditor.md) 中,放置预先创建的 `*ladder.gameObj.blk`。 2. 缩放它以匹配梯子的尺寸。 3. 使用菜单选项**Landscape > Export as composite**导出合成对象(或整个建筑)。 --- --- ## 相关文章 - [为垂直梯生成步兵导航网格](navmesh_gen_vert_ladders.md)