485 lines
14 KiB
Markdown
485 lines
14 KiB
Markdown
# XCUI NewEditor主线重建计划
|
||
|
||
日期:2026-04-07
|
||
|
||
## 1. 文档定位
|
||
|
||
本文档用于收口 `XCUI / XCEditor / new_editor` 当前阶段的真实执行主线。
|
||
|
||
它不是重复定义 XCUI 全部架构,而是把“接下来到底怎么做”重新拍板,并覆盖之前已经不再成立的执行假设。
|
||
|
||
本文档与现有文档的关系如下:
|
||
|
||
- `docs/plan/XCUI完整架构设计与执行计划.md`
|
||
- 继续作为 XCUI 总体架构与三层设计的总纲参考。
|
||
- 本文档
|
||
- 作为 `new_editor` 主线重建的最新执行计划。
|
||
- 优先级高于旧的阶段状态快照与旧执行顺序说明。
|
||
|
||
---
|
||
|
||
## 2. 当前拍板结论
|
||
|
||
当前必须明确以下结论,并作为后续开发硬约束:
|
||
|
||
### 2.1 旧 `editor/` 不再作为 XCUI 替换目标
|
||
|
||
- `editor/` 当前 ImGui 版本继续保留。
|
||
- 它是参考实现、行为对照和视觉基线来源。
|
||
- 当前阶段不再把主要精力放在“把 `XCEditor` 回填进旧 `editor/` 并替掉 ImGui”这条路线。
|
||
|
||
### 2.2 `new_editor/` 是未来正式编辑器主线
|
||
|
||
- `new_editor/` 不再只是临时名字上的沙盒。
|
||
- 它应被视为未来正式编辑器的新主线工作区。
|
||
- 后续真正重建编辑器时,应以 `new_editor/` 为宿主和产品主线,而不是回头改旧 `editor/`。
|
||
|
||
### 2.3 `tests/UI` 仍然是基础层唯一实验场
|
||
|
||
- `tests/UI/Core` 只验证 Core 共享能力。
|
||
- `tests/UI/Editor` 只验证 Editor 基础层能力。
|
||
- `tests/UI/Runtime` 只验证 Runtime 层能力。
|
||
- 所有基础层验证、交互试验、截图检查,都优先放在 `tests/UI`。
|
||
|
||
### 2.4 `new_editor/` 当前不承担“实验面板堆场”
|
||
|
||
- `new_editor/` 当前只承载:
|
||
- `XCEditor` 基础层库
|
||
- `new_editor` 的真实宿主与产品装配代码
|
||
- 在 Editor 基础层收口前,禁止把 `new_editor/` 继续做成杂乱的试验场或验证面板集合。
|
||
- 需要人工操作检查的内容,仍然通过 `tests/UI/*/integration` 提供。
|
||
|
||
### 2.5 当前主线优先级是 `Editor`,不是 `Runtime`
|
||
|
||
- `Runtime` 继续按三层设计保留,但不是当前最高优先级。
|
||
- 当前最高优先级是先把 `UI Core + UI Editor` 做成熟,并让其具备支撑 `new_editor` 正式重建的能力。
|
||
|
||
### 2.6 Editor 视觉基线以旧 `editor/` 为准
|
||
|
||
- `XCEditor` 当前默认视觉还没有达到旧 `editor/` 的程度。
|
||
- 后续 `Editor UI` 的默认主题、控件密度、边框、分隔线、状态反馈强度,都要以旧 `editor/` 现有风格为基线。
|
||
- 目标不是做一套“看起来差不多的深色 UI”,而是做出可以承载当前编辑器产品感的正式 Editor 风格。
|
||
|
||
---
|
||
|
||
## 3. 三层边界再次确认
|
||
|
||
### 3.1 Core
|
||
|
||
`Core` 负责:
|
||
|
||
- retained-mode UI 运行机制
|
||
- layout / input / focus / scroll / popup / text / render contract
|
||
- theme / token / style resolve 的通用机制
|
||
- 与 Editor / Runtime 都共享的基础能力
|
||
|
||
`Core` 不负责:
|
||
|
||
- Editor 风格语义
|
||
- Runtime screen/player 宿主策略
|
||
- 业务面板
|
||
|
||
### 3.2 Runtime
|
||
|
||
`Runtime` 负责:
|
||
|
||
- game UI 的 screen / layer / player / system
|
||
- runtime 输入路由、阻塞、导航、menu/hud/modal 语义
|
||
- 面向游戏开发者的运行时宿主层
|
||
|
||
`Runtime` 不负责:
|
||
|
||
- Editor 专用控件
|
||
- Editor 默认风格
|
||
- 新编辑器重建主线
|
||
|
||
### 3.3 Editor
|
||
|
||
`Editor` 负责:
|
||
|
||
- editor-only widget
|
||
- editor-only shell / dock / workspace / panel session / viewport shell
|
||
- editor 风格语义
|
||
- 默认 editor theme token 与资源化样式体系
|
||
|
||
`Editor` 不负责:
|
||
|
||
- 旧 `editor/` 的就地替换
|
||
- 直接承担游戏 Runtime UI
|
||
|
||
---
|
||
|
||
## 4. 当前状态评估
|
||
|
||
## 4.1 已有基础
|
||
|
||
当前 `XCEditor` 已经具备以下基础:
|
||
|
||
- shell 级模型与状态骨架:
|
||
- workspace
|
||
- dock host
|
||
- panel registry
|
||
- panel lifecycle
|
||
- layout persistence
|
||
- shortcut / command 基础路径
|
||
- editor 常用基础件:
|
||
- menu bar / popup / context menu
|
||
- tab strip
|
||
- tree view / list view
|
||
- scroll view
|
||
- property grid
|
||
- viewport shell / viewport slot
|
||
- bool / number / enum field
|
||
- `tests/UI/Editor` 已形成 `unit + integration` 的基础验证体系。
|
||
|
||
结论:
|
||
|
||
- `XCEditor` 已经不是 demo 级玩具。
|
||
- 它已经具备继续作为 `new_editor` 底座推进的资格。
|
||
|
||
## 4.2 当前最突出的缺口
|
||
|
||
当前离“可正式支撑 `new_editor` 重建”的差距主要在以下几点:
|
||
|
||
### 4.2.1 Editor 默认样式资源层太薄
|
||
|
||
- 当前 `.xctheme` 只能控制少量颜色、spacing、radius。
|
||
- 远不足以承载旧 editor 那种完整的产品级视觉体系。
|
||
- 目前很多控件仍然只是在通用深色皮肤上运行,不是正式 Editor 风格。
|
||
|
||
### 4.2.2 Widget 视觉参数仍未充分资源化
|
||
|
||
- 仍有大量 palette / metrics / font size / rounding / inset 硬编码在 C++ 里。
|
||
- 这会导致 `.xctheme` 只能“改一点颜色”,无法真正控制 Editor 外观。
|
||
|
||
### 4.2.3 视觉基线还未对齐旧 editor
|
||
|
||
- 当前 widget 默认密度偏松。
|
||
- 圆角偏大。
|
||
- 行高偏高。
|
||
- 分隔线与层级关系不够清晰。
|
||
- 菜单栏、面板框架、属性行、tab 等视觉结构还没有贴近旧 editor。
|
||
|
||
### 4.2.4 仍缺少若干 Editor 通用字段件与高级能力
|
||
|
||
- `TextField`
|
||
- `Vector2Field`
|
||
- `Vector3Field`
|
||
- `Vector4Field`
|
||
- `ColorField`
|
||
- 后续可扩展的 `AssetField / ObjectField`
|
||
|
||
### 4.2.5 collection / shell 高级能力还未收口
|
||
|
||
- multi-selection
|
||
- inline rename
|
||
- drag/drop contract
|
||
- virtualization
|
||
- icon / glyph 统一语义
|
||
- 更完整的 toolbar / status / shell chrome 体系
|
||
|
||
---
|
||
|
||
## 5. 当前阶段硬规则
|
||
|
||
### 5.1 先做基础层,不提前做业务面板
|
||
|
||
在 Editor 基础层完成收口前:
|
||
|
||
- 不开始复刻 Hierarchy / Inspector / Console / Project 这些完整业务面板。
|
||
- 只允许做承载这些面板将来必需的通用 Editor 基础件。
|
||
|
||
### 5.2 Core 能力缺口必须先回补 Core
|
||
|
||
凡是发现缺的是:
|
||
|
||
- layout
|
||
- input
|
||
- focus
|
||
- popup
|
||
- text
|
||
- render contract
|
||
- shared widget primitive
|
||
|
||
都必须优先回补到 `Core` 或 shared 层,而不是在 `Editor` 层写临时绕过实现。
|
||
|
||
### 5.3 Editor 风格必须资源化,但语义归 Editor 层管理
|
||
|
||
- 样式机制归 `Core`
|
||
- Editor 默认风格语义归 `Editor`
|
||
- 颜色 / spacing / radius / border / density / typography 应尽量走资源化 token
|
||
- 控件行为与结构语义仍由 `Editor` 代码层控制
|
||
|
||
### 5.4 `new_editor/` 只做正式产品装配,不做测试堆场
|
||
|
||
- 验证入口继续放在 `tests/UI`
|
||
- `new_editor/` 只保留未来正式编辑器真正需要的宿主、装配、资源与业务层结构
|
||
|
||
---
|
||
|
||
## 6. Editor基础层完成标准
|
||
|
||
只有当以下条件基本满足后,才允许进入 `new_editor` 业务面板重建阶段:
|
||
|
||
### 6.1 视觉与样式层
|
||
|
||
- 已建立足够厚的 Editor token 体系
|
||
- widget 的 palette / metrics 基本完成 theme 驱动
|
||
- menu / popup / tab / panel / property / list / tree / status / scrollbar / splitter 都已接入 Editor 主题
|
||
- 新主题能稳定逼近旧 editor 的视觉基线
|
||
|
||
### 6.2 字段件层
|
||
|
||
- `BoolField / NumberField / EnumField / TextField / Vector2/3/4Field / ColorField` 可稳定使用
|
||
- `PropertyGrid` 能复用这些字段件,而不是自己硬画假控件
|
||
|
||
### 6.3 collection / shell 层
|
||
|
||
- tree / list / tab / popup / scroll / dock / workspace 都具备稳定基础交互
|
||
- keyboard / focus / shortcut / popup / panel session 契约稳定
|
||
- 关键状态机已通过 `unit`
|
||
|
||
### 6.4 验证层
|
||
|
||
- 每个重要基础件都有对应 `unit`
|
||
- 每个重要交互点都有对应 `integration exe`
|
||
- 截图检查链路可用
|
||
- 中文操作指示和检查重点明确
|
||
|
||
---
|
||
|
||
## 7. 分阶段执行计划
|
||
|
||
## Phase A:Editor主题系统重构
|
||
|
||
### 目标
|
||
|
||
把 `Editor` 当前“薄主题 + 硬编码 widget 视觉”的状态,重构为“厚 token + 统一默认 Editor Theme”。
|
||
|
||
### 任务
|
||
|
||
- 定义 Editor 主题 token 命名规范。
|
||
- 覆盖以下语义槽位:
|
||
- workspace
|
||
- panel
|
||
- header
|
||
- footer
|
||
- menu bar
|
||
- popup
|
||
- tab
|
||
- property row
|
||
- field label/value
|
||
- status bar
|
||
- splitter
|
||
- scrollbar
|
||
- selection / hover / active / focus
|
||
- 把现有 widget 中的默认 palette / metrics 尽量迁出为 Editor theme 可控项。
|
||
- 建立“旧 editor 风格对齐”的基准场景与截图检查。
|
||
|
||
### 完成标准
|
||
|
||
- 主题资源文件已足够控制主要 Editor 视觉。
|
||
- 修改主题时,不再需要频繁改 widget 绘制代码。
|
||
|
||
## Phase B:字段件体系补齐
|
||
|
||
### 目标
|
||
|
||
补齐 Editor 通用字段件,为后续 Inspector / 面板表单重建打基础。
|
||
|
||
### 任务
|
||
|
||
- 正式完成 `TextField`
|
||
- 完成 `Vector2Field`
|
||
- 完成 `Vector3Field`
|
||
- 完成 `Vector4Field`
|
||
- 完成 `ColorField`
|
||
- 视需要评估 `AssetField / ObjectField` 的基础契约
|
||
- 让 `PropertyGrid` 正式承接这些字段件
|
||
|
||
### 完成标准
|
||
|
||
- `PropertyGrid` 不再停留在基础标量字段件阶段。
|
||
- 复合字段件已有完整 `unit + integration`。
|
||
|
||
### 当前检查点(2026-04-08)
|
||
|
||
- `TextField` 已完成正式接入:
|
||
- `XCEditor` 已提供 `UIEditorTextField` 与 `UIEditorTextFieldInteraction`
|
||
- `UIEditorTheme` 已补齐 `TextField` theme resolver 与 hosted builder
|
||
- `PropertyGrid` 的 `Text` 行已切到正式 `TextField` 复用链路
|
||
- `Vector2Field` 已完成第一批复合字段件接入:
|
||
- `XCEditor` 已提供 `UIEditorVector2Field` 与 `UIEditorVector2FieldInteraction`
|
||
- `UIEditorTheme` 已补齐 `Vector2Field` theme resolver 与 hosted builder
|
||
- `tests/UI/Editor` 已补齐 `Vector2Field` 的 layout / hit-test / interaction / theme 单测
|
||
- `editor_ui_vector2_field_basic_validation` 已可编译、运行、自动截图,并已接入 `editor_ui_integration_tests`
|
||
- 当前 `tests/UI/Editor` 中,这两批字段件都遵守同一条验证规范:
|
||
- 顶部必须明确写“这个测试验证什么功能”
|
||
- 试验面板只放当前批次要检查的控件
|
||
- 保持 Unity 向黑白灰风格,不把业务面板塞进 `new_editor`
|
||
- 因此 `Phase B` 当前已正式完成前两项:
|
||
1. `TextField`
|
||
2. `Vector2Field`
|
||
- 下一批主线顺序固定为:
|
||
1. `Vector3Field`
|
||
2. `Vector4Field`
|
||
3. `ColorField`
|
||
|
||
## Phase C:Collection与交互高级能力收口
|
||
|
||
### 目标
|
||
|
||
让 tree/list/tab/menu/property 进入可长期复用的 Editor 基础件水平。
|
||
|
||
### 任务
|
||
|
||
- multi-selection
|
||
- inline rename/edit session
|
||
- drag/drop contract
|
||
- virtualization 基础设计与第一轮实现
|
||
- icon / glyph / disclosure / dropdown indicator 统一语义
|
||
- collection 与 keyboard navigation/focus 的进一步收口
|
||
|
||
### 完成标准
|
||
|
||
- collection 控件不再只是演示级原型。
|
||
- 已具备支撑真实 editor 面板的核心交互能力。
|
||
|
||
## Phase D:Shell与Workspace正式收口
|
||
|
||
### 目标
|
||
|
||
把 shell 基础层从“能演示”推进到“可作为新编辑器外壳底座”。
|
||
|
||
### 任务
|
||
|
||
- menu bar / popup / context menu 视觉与交互对齐旧 editor 基线
|
||
- panel frame / status bar / tab strip / dock host 进一步主题化和结构收口
|
||
- workspace session / panel lifecycle / shortcut / command / layout persistence 继续补齐
|
||
- viewport shell / viewport input bridge 与 Editor shell 契约继续稳定
|
||
|
||
### 完成标准
|
||
|
||
- shell 基础层达到可承载空业务编辑器外壳的程度。
|
||
|
||
## Phase E:`new_editor` 空壳正式接管
|
||
|
||
### 目标
|
||
|
||
在不引入具体业务面板的前提下,让 `new_editor` 正式使用 `XCEditor` 搭建空编辑器壳层。
|
||
|
||
### 任务
|
||
|
||
- `new_editor` 中装配:
|
||
- 主菜单壳层
|
||
- 工具栏占位
|
||
- workspace / dock 壳层
|
||
- status bar
|
||
- viewport shell 占位
|
||
- 保持业务内容为空或极简占位,不提前混入具体面板逻辑。
|
||
|
||
### 完成标准
|
||
|
||
- `new_editor` 具备“正式产品空壳”形态。
|
||
- 旧 `editor/` 继续只承担参考作用。
|
||
|
||
## Phase F:业务面板分批重建
|
||
|
||
### 前置条件
|
||
|
||
只有在 Phase A 到 Phase E 基本完成后,才进入本阶段。
|
||
|
||
### 执行原则
|
||
|
||
- 以旧 `editor/` 为行为和视觉参考
|
||
- 以 `new_editor/` 为正式宿主
|
||
- 业务面板按独立垂直切片逐个迁入
|
||
|
||
### 候选顺序
|
||
|
||
- Inspector 基础表单链路
|
||
- Hierarchy
|
||
- Console
|
||
- Project
|
||
- Scene/Game 相关工具壳层
|
||
|
||
---
|
||
|
||
## 8. 测试与验收规则
|
||
|
||
### 8.1 Core 能力进 `tests/UI/Core`
|
||
|
||
凡是共享能力,一律在 `tests/UI/Core` 验证:
|
||
|
||
- popup overlay primitive
|
||
- scroll / focus / keyboard navigation
|
||
- text input / style resolve / layout
|
||
|
||
### 8.2 Editor-only 能力进 `tests/UI/Editor`
|
||
|
||
凡是 editor-only,一律在 `tests/UI/Editor` 验证:
|
||
|
||
- field widgets
|
||
- property grid
|
||
- menu / popup / tab / dock / workspace
|
||
- shell state / panel lifecycle / viewport shell
|
||
|
||
### 8.3 `new_editor` 不承担测试职责
|
||
|
||
- `new_editor` 只做产品集成冒烟检查
|
||
- 不把验证场景继续塞到 `new_editor` 里
|
||
|
||
### 8.4 每批次收口要求
|
||
|
||
每推进一个 Editor 基础件批次,至少必须完成:
|
||
|
||
- 对应 `unit`
|
||
- 对应 `integration exe`
|
||
- 人工截图检查
|
||
- 风格与交互结论记录
|
||
|
||
---
|
||
|
||
## 9. 与其它计划的关系
|
||
|
||
### 9.1 继续有效的文档
|
||
|
||
- `docs/plan/XCUI完整架构设计与执行计划.md`
|
||
- 继续作为 XCUI 总体架构总纲
|
||
- `docs/plan/Material Inspector与Shader属性面板收口计划_2026-04-07.md`
|
||
- 继续作为未来业务层计划保留
|
||
- 但执行前提是本计划中的 Editor 基础层先收口
|
||
|
||
### 9.2 已被覆盖的旧结论
|
||
|
||
以下旧结论不再作为当前主线执行依据:
|
||
|
||
- “后续主要目标是把 XCUI 直接嵌回旧 `editor/` 并替掉 ImGui”
|
||
- “`new_editor/` 长期只作为临时沙盒存在”
|
||
- “可以在 `new_editor/` 中继续堆各类试验面板作为主验证入口”
|
||
|
||
---
|
||
|
||
补充归档结论:
|
||
|
||
- `docs/plan/used/XCUI_Phase_Status_2026-04-05.md` 已转入归档,不再作为当前主线执行依据。
|
||
|
||
## 10. 当前结论
|
||
|
||
当前最重要的不是立刻复刻旧 editor 的具体业务面板,而是先把:
|
||
|
||
- `UI Core`
|
||
- `UI Editor`
|
||
- `new_editor` 正式宿主边界
|
||
|
||
这三者之间的职责彻底做对。
|
||
|
||
正确路径是:
|
||
|
||
1. 继续在 `tests/UI` 中把基础层做成熟
|
||
2. 以旧 `editor/` 为风格与行为参考
|
||
3. 以 `new_editor/` 为未来正式编辑器主线
|
||
4. 待基础层达标后,再进入业务面板分批重建
|
||
|
||
这条路线比“直接替换旧 editor 中的 ImGui”风险更低,也更符合当前工程实际。
|