## 概述 在继续之前,强烈建议您查看 [复合结构](../../../assets/all-about-blk/composit_blk.md) 的主要文章。 ## 如何启用 您现在可以直接从 [Asset Viewer](../asset-viewer/asset_viewer.md) 编辑合成。要启用 Composite Editor,请导航到 **View** 菜单: How to enable, option 1 如果您希望编辑器在 Asset Tree 中选择合成时自动打开,并在选择任何其他类型的对象时关闭,则可以在 **Settings**中启用此选项: How to enable, option 2 ```{caution} *复合编辑器* 仍在开发中,在处理具有许多嵌套元素的大型复合时,它可能会显著影响性能。例如,对于基于 daNetGame 的游戏中具有复杂室内结构的房屋,这一点尤其重要。因此,默认情况下,自动打开选项处于禁用状态。使用风险自负。 ``` ## 创建新的合成 1. 在 **Asset Tree**(资产树)中,选择要放置复合的目录。 2. 右键单击并从上下文菜单中选择 **Create new composite asset**。 Creating a new composite 3. 在弹出窗口中,输入所需的名称,确保遵循 [命名约定](../../../dagor-home/documentation/naming_conventions.md)。如果已存在具有此名称的资产,则当您尝试创建该资产时,将显示警告。 Creating a new composite ## 复合编辑器界面 该界面分为两个主要部分: **Outliner** 和 **Properties**. Composite editor interface ### Composite Outliner **Composite Outliner** 的功能类似于 **Asset Tree** ,但特定于复合。复合本身是结构的 “根”。 当您创建新的复合时,它最初将仅包含根块及其名称。要添加新节点,请单击此唯一元素,然后从上下文菜单中选择 **Add Node**。 新创建的节点不包含任何参数,相当于空的`node{}`。 通过上下文菜单,您可以定义节点的类型: - **Change asset** 允许您选择要渲染的资源,类似于 `name:t =`。 - **Add entity**: 将节点转换为随机实体,类似于`ent{}`。 - **Add node**: 添加子节点。 - **Delete node**: 删除节点。 ```{note} - 添加资产会隐藏添加实体的选项,反之亦然 – 节点不能同时包含 `name:t` 和 `ent{}`。 - 您还可以使用 **Delete** 键删除节点,但在这两种情况下,都需要确认。 - 删除一个节点也会删除它的所有子节点,因为它们在技术上嵌套在其中(例如,`node{node{}}`)。请记住这一点。 ``` 如果节点已包含资产,则可以通过双击将其打开。当您需要编辑子合成时,这非常有用。但是,由于当前没有最近打开的资产的历史记录,因此只能通过在 **Asset Tree** 中再次找到它来返回到 “`main`” 组合。因此,编辑器将在切换到其他资产之前要求确认。 #### 识别随机节点 随机节点显示与空节点相同的图标,但它将被命名为`random`而不是`node`。 所有可能的实体都列在层次结构中较低一级。 由于随机节点可以有子节点,这可能会导致严重的混淆 – 这些 *子节点* 也会显示得低一级。为了解决这个问题,所有 `ent{}` 条目都显示有一个额外的图标。第一个图标表示空节点,而第二个图标表示实体类型。 Identifying random nodes 在`.composit.blk`文件中,屏幕截图中显示的内容可能如下所示: ```text node{ ent{name:t="table_a:rendinst"} ent{name:t="table_b:rendinst"} node{name:t="cup_a:rendinst"} ent{name:t=""} node{name:t=""} } ``` 为了提高可读性,建议先添加所有 `ent{}` 条目,然后添加子节点。但是,无论哪种方式,它都会起作用。 ### 编辑器属性 不要将此与整个复合资产的 **Properties** 混淆。 Editor properties 此部分包含所选节点的属性,以及用于保存或还原更改的选项。 **实体** 此面板列出了所有 `ent{}` 节点。在这里,您可以设置现有实体的权重,更改资产(通过显示资产名称的大按钮,如果未选择资产,则为 **“--”**),并使用 **“+”** 按钮将新实体添加到列表末尾。上下文菜单(通过 **“...”** 按钮访问)允许您在任何现有实体之后(而不是在列表末尾)添加或删除所选实体。 **子节点** *子*节点也存在类似的面板,尽管出于明显的原因,这里没有分配权重。此面板将来可能会被删除,因为它会影响重型合成的性能(某些建筑物有数千个*子*节点),并且可以通过 **Outliner** 获得相同的功能。 **节点参数** 此部分包含所选节点的属性。要移动节点,您需要启用 **Use transformation matrix** 复选框,该复选框对应于 `tm:m=`块。如果启用此复选框,则可以以用户可读的格式编辑矩阵: Node parameters **Add Parameters** 在这里,您可以为节点设置其他参数。由于转换矩阵优先于随机偏移量,因此尝试添加两者将触发警告,并且参数字段将被锁定以进行编辑。 Add parameters 要应用随机转换,请禁用 **Use transformation matrix** 复选框。 **Composit** **Composit**选项卡仅提供两个选项:**cancel** 或 **save changes**。如果您尝试从合成切换到另一个资源,编辑器还会询问如何处理当前更改。 ## 可视化编辑 现在我们已经到了有趣的部分。除了基于文本的编辑之外,您还可以直接在视区中进行调整。您可以左键单击任何对象,相应的节点将在 3D 视图和 **Outliner** 中被选中。按下 '`Z`' 将使摄像机在所选节点上居中并放大它。遗憾的是,尚不支持同时选择多个节点。但是,您可以使用 Gizmo 编辑矩阵。 当复合编辑器打开时,工具栏中会显示新图标:**选择**、**移动**、**旋转**和 **缩放**。**选择** 图标始终处于活动状态,但要使其他工具生效,必须使用前面提到的复选框为所选节点启用转换矩阵。无法通过 Gizmo 应用随机偏移。这些工具可以使用标准热键激活:分别是 `Q`, `W`, `E`, 和 `R`。 Visual editing