跳到主要内容

模板

模板,也称预制体,用于创建可复用实体,加快开发。场景中可放置多个实例,将修改应用到模板资源后,所有实例都会更新。

创建模板​

右键场景实体,选择 Template → New Template,在资源面板当前文件夹创建模板,原实体自动成为该模板实例。

向场景添加模板​

拖动模板资源到场景,或在层级中右键实体,选择 Template → Add Instance,再选择资源,将实例添加到该实体下。

模板实例在层级中的外观略有不同:

模板实例

实例根实体和全部子实体使用不同图标,表明属于同一模板。

选中实例根节点,实体检查器显示以下属性:

模板检查器

更新模板​

先在编辑器中添加模板实例,修改实例,再将变化应用到模板资源。

模板覆盖项​

修改实例及子实体会生成覆盖项,分为:

  • 字段覆盖:实体或组件字段不同于模板资源。
  • 新增实体覆盖:实例中添加了模板资源中不存在的子实体。
  • 删除实体覆盖:从实例删除了子实体。

将覆盖项应用到模板后,它们成为模板内容,不再是覆盖。

选中实例根,在实体检查器查看覆盖摘要:

覆盖项

被覆盖字段的标签颜色不同。点击 View Diff 查看完整列表,见覆盖差异视图。

悬停彩色标签可查看具体覆盖详情:

覆盖提示

AI

跨实例应用覆盖前,可让 AI 助手通过**编辑器 MCP 服务器**说明将传播的修改。先创建检查点,只应用符合预期的内容。

应用覆盖​

在字段悬停提示中点击 APPLY,应用单项。

选中实例根,在检查器点击 Apply All,应用全部;也可右键根节点,选择 Template → Apply To Template。

也可以从覆盖差异视图应用。

应用后的修改会传播到任意场景中的其他模板实例。

备注

目前无法撤销向模板资源应用覆盖的操作。

还原覆盖​

在字段悬停提示点击 REVERT,还原单项。

选中根节点,在检查器点击 Revert All,还原全部。

也可以从覆盖差异视图还原。

覆盖的更多细节​

创建覆盖后,对应属性会受到保护,不再跟随模板资源更新。例如:

模板实例

修改 Tree1/Sphere 位置,生成位置覆盖。再创建另一个实例,修改 Sphere 并应用到模板,第一个实例的位置不会变化,因为其已有覆盖。需要先还原覆盖,才能继续接收模板位置更新。

运行时实例化​

运行时可按以下方式实例化:

const templateAsset = this.app.assets.get(templateAssetId);
const instance = templateAsset.resource.instantiate();
this.app.root.addChild(instance);

也可通过脚本属性传入模板资源,无需按 ID 搜索。

何时需要加载模板资源?​

模板保存实体层级和数据,类似场景。编辑器中加入实例时,这些数据会包含在场景数据中。

运行时的既有实例不再关联模板资源,因此可以不预加载模板,降低下载量。

只有运行时创建新实例,才需要加载模板资源。