爬梯
概览和结构
在daNetGame项目中,有一种攀爬垂直(或接近垂直)梯子的技术。
作为游戏的一部分(玩家可以攀爬)的垂直梯子实际上是复合物体。它们由两个部分组成:
视觉几何 (
*.dag)游戏对象 (
*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– 阶数(这一点很重要,因为它会影响角色手脚在实际梯子几何图形上的位置)。
游戏对象的实际尺寸是通过其矩阵在复合对象中确定的,该矩阵将视觉几何图形与游戏对象整合在一起。这样,游戏对象就能与特定梯子所需的比例相匹配。
创建阶梯游戏对象
一般指南
您不一定需要创建一个新的游戏对象。您可以重新使用现有的对象,只需在复合对象中对其进行转换,使其适合您的梯子即可。
Note
不过,请务必记住,游戏对象包含预定义的梯级数,不得更改。更改它将会破坏已使用该对象的梯子。如果阶数不符合您的需要,请创建一个新对象。
避免修改默认立方体尺寸(
boxSz:r=0.5,即每边 1 米)。如果出于某种原因决定更改该值,则必须确保在 3ds Max 中创建复合对象时对尺寸进行相应调整(如下所述)。否则,3ds Max 和 Asset Viewer 中的结果将不一致。梯子是独立的物体还是建筑物的一部分并不重要,每种情况都是独一无二的。如果一个梯子被多次使用,那么将其作为一个单独的对象会更合理。如果梯子是特定建筑物的独有物件,则可以保留为建筑物几何体的一部分(考虑优化、LOD 等)。
技术保持不变–每个梯子都必须通过复合对象添加一个游戏对象。
最好将
*ladder.gameObj.blk与可视几何图形一起存储。除非游戏需要,否则请避免在物理系统中的每一步都添加碰撞。物理碰撞不会与攀爬动画产生交互作用–它只会与胶囊发生碰撞。
游戏对象的跨度应从下台阶到上台阶。 否则,可能会出现手脚位置不正确的情况。
下面是一个使用 wood_ladder_a 模型的示例:
Note
截至 2023 年 7 月,系统设置为角色只能从游戏对象的 X 侧攀爬。从其他面攀爬可能不起作用,或行为不正确。
创建游戏对象的方法
方法 1
在 3ds Max 场景中,创建一个尺寸为 1x1x1m 的立方体,其支点位于中心。如果更改了
boxSz:r=0.5的大小,则需要相应调整立方体的大小。缩放立方体,使其与梯子的尺寸一致。
使用可用工具导出复合对象(梯子 + 游戏对象)(例如 dag2rires)。
方法 2
在 daEditor 中,放置预先创建的
*ladder.gameObj.blk。缩放它以匹配梯子的尺寸。
使用菜单选项Landscape > Export as composite导出合成对象(或整个建筑)。