模板
模板,也称预制体,用于创建可复用实体,加快开发。场景中可放置多个实例,将修改应用到模板资源后,所有实例都会更新。
创建模板
右键场景实体,选择 Template → New Template,在资源面板当前文件夹创建模板,原实体自动成为该模板实例。
向场景添加模板
拖动模板资源到场景,或在层级中右键实体,选择 Template → Add Instance,再选择资源,将实例添加到该实体下。
模板实例在层级中的外观略有不同:

实例根实体和全部子实体使用不同图标,表明属于同一模板。
选中实例根节点,实体检查器显示以下属性:

更新模板
先在编辑器中添加模板实例,修改实例,再将变化应用到模板资源。
模板覆盖项
修改实例及子实体会生成覆盖项,分为:
- 字段覆盖:实体或组件字段不同于模板资源。
- 新增实体覆盖:实例中添加了模板资源中不存在的子实体。
- 删除实体覆盖:从实例删除了子实体。
将覆盖项应用到模板后,它们成为模板内容,不再是覆盖。
选中实例根,在实体检查器查看覆盖摘要:

被覆盖字段的标签颜色不同。点击 View Diff 查看完整列表,见覆盖差异视图。
悬停彩色标签可查看具体覆盖详情:

跨实例应用覆盖前,可让 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 搜索。
何时需要加载模板资源?
模板保存实体层级和数据,类似场景。编辑器中加入实例时,这些数据会包含在场景数据中。
运行时的既有实例不再关联模板资源,因此可以不预加载模板,降低下载量。
只有运行时创建新实例,才需要加载模板资源。