修复: 预制体序列化格式从场景格式转换为标准预制体格式

- 重写 scene-script.js 中 create-prefab 处理器,增加 9 步后处理管线
- 移除 cc.Scene、添加 cc.Prefab 包装器和 cc.PrefabInfo、清空 _id
- 更新 UPDATE_LOG.md、注意事项.md 及 main.js 相关注释
This commit is contained in:
火焰库拉
2026-03-02 22:01:01 +08:00
parent 77aba8e7f3
commit 3e909a129f
4 changed files with 344 additions and 16 deletions

View File

@@ -11,12 +11,14 @@
### 1.2 预制体的正确创建流程
- **推荐工具**:使用 `prefab_management``create` 操作,或 `create_prefab` 工具。
- **核心逻辑**:该工具会同步处理节点的序列化、db 路径映射以及资源刷新Refresh确保预制体及其配套的 `.meta` 文件原子化生成
- **⚠️ IPC 签名要点**:底层使用的 `scene:create-prefab` 消息有严格的参数格式要求
1. 必须使用 `Editor.Ipc.sendToPanel("scene", ...)` 而非 `sendToMain`(该消息由 Scene 面板渲染进程处理)
2. 节点 ID 必须包裹在**数组**中:`[nodeId]`
3. 第二个参数必须是 **db:// 目录路径**(如 `db://assets`),而非完整文件路径
4. 预制体文件名取决于节点名称,因此创建前需先通过 `scene:set-property` 重命名节点
- **核心逻辑**:该工具已完全绕过 Cocos Creator 内置的 `scene:create-prefab` IPC该接口存在根节点 PrefabInfo 损坏等已知 Bug改为在场景进程中使用 `Editor.serialize(node)` 获取原始数据后,通过自定义 9 步后处理管线转换为标准预制体格式
- **⚠️ 序列化格式要点**:正确的预制体文件必须满足以下结构
1. 数组索引 0 必须是 `cc.Prefab` 包装器对象,其 `data` 字段指向根节点
2. 节点`_parent` 必须为 `null`(不能指向 `cc.Scene`
3. 每个 `cc.Node` 必须有 `_prefab` 引用指向对应的 `cc.PrefabInfo` 对象
4. 每个 `cc.PrefabInfo` 必须包含 `root`(指向根节点)、`asset`(指向索引 0 的 `cc.Prefab`)和唯一的 `fileId`
5. 所有节点和组件的 `_id` 字段必须为空字符串(运行时由引擎分配)。
6. 文件中不能包含 `cc.Scene` 对象。
---