修复: 预制体序列化格式从场景格式转换为标准预制体格式
- 重写 scene-script.js 中 create-prefab 处理器,增加 9 步后处理管线 - 移除 cc.Scene、添加 cc.Prefab 包装器和 cc.PrefabInfo、清空 _id - 更新 UPDATE_LOG.md、注意事项.md 及 main.js 相关注释
This commit is contained in:
14
docs/注意事项.md
14
docs/注意事项.md
@@ -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` 对象。
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user