fix(prefab): 修复预制体编辑模式的保存与退出,使用原生 scene://edit-mode 接口替代无效的 IPC 广播,更新相关使用文档与安全规定
This commit is contained in:
@@ -431,3 +431,17 @@ ps: 感谢 @亮仔😂 😁 🐔否? 提供的反馈以及操作日志
|
||||
|
||||
- **问题**: `get-hierarchy` 的 `dumpNodes` 递归遍历子节点时无数量限制,若某个节点下有数百个同级子节点,返回数据量巨大。
|
||||
- **修复**: 新增 `MAX_CHILDREN_PER_LEVEL = 50` 安全上限。每层最多返回 50 个子节点,超出部分在返回数据中通过 `childrenTruncated` 字段标注被截断的数量,帮助 AI 知悉还有更多子节点未列出。
|
||||
|
||||
---
|
||||
|
||||
## 预制体全生命周期编辑与状态流转修复 (2026-03-08)
|
||||
|
||||
### 1. `save_prefab` 与 `close_prefab` 原生化改造
|
||||
|
||||
- **问题**: AI 尝试从 `McpTestPrefab.prefab` 等文件中通过 `scene:save-prefab` 和 `scene:close-prefab` 保存并退出预制体模式时,报错找不到事件。分析源码发现,这些直觉上的 IPC 消息实际上并不存在,导致一旦用 `open_prefab` 进入隔离的编辑空间后,无法正确将修改落盘,且无法安全退出返回原大场景。
|
||||
- **修复**:
|
||||
1. **直接调用内部 API**: 完全废弃尝试通过常规 IPC 发送伪装指令的想法。在 `scene-script.js` 内部直接 `require("scene://edit-mode")`,获取到负责管理场景所有状态机(如大场景模式、预制体模式、动画编辑模式)的核心模块。
|
||||
2. **真实状态机驱动**:
|
||||
- 对于 `save_prefab`,直接调用无参的 `editMode.save()`。这100%等同于人工点击编辑器左上角的“保存”按钮。也因此**移除了多余的 `rootNodeId` 参数**限制。
|
||||
- 对于 `close_prefab`,直接调用 `editMode.pop()`。彻底将当前编辑的预制体上下文从堆栈中弹出,干净利落地回落回原始场景,并自动更新引擎各面板 (Inspector、层级管理器等) 状态。
|
||||
- **意义**: 到目前为止,涵盖**创建 (`create_prefab`) -> 打开 (`open_prefab`) -> 修改 -> (可选)保存 (`save_prefab`) -> 退出 (`close_prefab`)** 的完整大模型端到端自动化预制体流水线被彻底打通。没有任何妥协,一切就像是有一个看不见的高手坐在引擎主控面板前帮你点按按钮。
|
||||
|
||||
Reference in New Issue
Block a user