# .skeleton.blk ## .skeleton.blk的目的 复合模型由共享公共骨架的多个动态模型构成。以下是为复合模型创建 `.skeleton.blk`文件的规则。 ## 示例 让我们以拥有各种炮塔和火炮选项的坦克为例来分解配置。 ``` name:t="tank_body.lod00.dag" attachSubSkel{ attach_to:t="bone_turret" skel_file:t="turret_a.lod00.dag" skel_node:t="bone_turret" attachSubSkel{ attach_to:t="bone_gun_a" skel_file:t="gun_a.lod00.dag" skel_node:t="bone_gun_a" } attachSubSkel{ attach_to:t="bone_gun_b" skel_file:t="gun_b.lod00.dag" skel_node:t="bone_gun_b" add_prefix:t="G1:" } attachSubSkel{ attach_to:t="bone_gun_c" skel_file:t="gun_b.lod00.dag" skel_node:t="bone_gun_b" add_prefix:t="G2:" } } attachSubSkel{ attach_to:t="bone_turret" skel_file:t="turret_b.lod00.dag" skel_node:t="bone_turret" add_prefix:t="T1:" } ``` ### 参数详情 - `name:t=`: 父模型的名称。 - `attachSubSkel`: 用于添加动态模型的模块。 - `attach_to:t=`: 动态模型链接到的父骨骼中的节点。 - `skel_file:t=`: 子模型的名称。 - `skel_node:t=`: 子骨架中链接到父骨架的节点。 - `add_prefix:t=`: 子模型的所有节点的前缀。 ### 解释 在上面的`.skeleton.blk` 示例中,我们将 `turret_a` 和 `turret_b` 模型添加到 `tank_body` 生成的骨架中,将它们链接到 `bone_turret`。此外,我们将枪 `gun_a` 和 `gun_b` 连接到`turret_a`的节点 '`bone_gun_a`'、'`bone_gun_b`' 和 '`bone_gun_c`' 上,'`gun_b`' 被连接到不同的骨骼两次。 由于我们正在创建一个通用骨架,因此不能有具有相同名称的节点。为了解决这个问题,我们为每个副本的节点分配一个唯一的前缀。例如,“`bone_gun_b`”的两个副本的节点接收前缀“`G1`”和“`G2`”,而“`turret_b`”的节点接收前缀“`T1`”。 ```{important} - 指定附件节点时,不考虑自动添加的前缀。 - 如果子节点链接到同名节点,则会从层次结构中删除前一个节点以避免重复。 ``` ### 分层依赖关系 虽然可以创建长依赖关系链,但更简单的结构更容易管理。在添加另一个级别之前,请确保其必要性。 多级层次结构可能如下所示: ``` name:t="papa.lod00.dag" attachSubSkel{ attach_to:t="bone_papa" skel_file:t="child.lod00.dag" skel_node:t="bone_child" add_prefix:t="layer01:" attachSubSkel{ attach_to:t="bone_child" skel_file:t="child.lod00.dag" skel_node:t="bone_child" add_prefix:t="layer02:" attachSubSkel{ attach_to:t="bone_child" skel_file:t="child.lod00.dag" skel_node:t="bone_child" add_prefix:t="layer03:" attachSubSkel{ attach_to:t="bone_child" skel_file:t="child.lod00.dag" skel_node:t="bone_child" add_prefix:t="layer04:" } } } } ``` 此结构允许进行广泛的自定义,同时通过使用前缀来避免命名冲突并确保适当的层次结构,从而保持可管理性。