From 612342d170ac9832daa54fa691a703bf539d74f7 Mon Sep 17 00:00:00 2001 From: ssdfasd <2156608475@qq.com> Date: Tue, 24 Mar 2026 18:20:10 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E6=9B=B4=E6=AD=A3=20Editor=20=E8=AE=BE?= =?UTF-8?q?=E8=AE=A1=E6=96=87=E6=A1=A3=E4=B8=AD=E7=9A=84=20Component=20?= =?UTF-8?q?=E7=B3=BB=E7=BB=9F=E6=8F=8F=E8=BF=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 更正: Engine 核心已有完整组件系统,Editor Inspector 只是未完善 - 补充: Editor 和 Engine 使用两套不同的 GameObject/Component 系统 (重大架构问题) - 补充: Scene 序列化依赖描述修正 - 补充: 架构问题中新增 Editor/Engine 系统差异分析 --- docs/plan/Editor设计与实现.md | 75 +++++++++++++++++++---------------- 1 file changed, 41 insertions(+), 34 deletions(-) diff --git a/docs/plan/Editor设计与实现.md b/docs/plan/Editor设计与实现.md index 456b93f5..e4611bfd 100644 --- a/docs/plan/Editor设计与实现.md +++ b/docs/plan/Editor设计与实现.md @@ -122,7 +122,7 @@ if (!ImGui::IsItemActive() && ImGui::IsMouseClicked(0)) { | 功能 | Fermion (1173 行) | XCEngine (94 行) | 状态 | |------|-------------------|------------------|------| -| 组件显示 | ✅ 模板系统 | ❌ 只有 2 种 | 需重写 | +| 组件显示 | ✅ 模板系统 | ⚠️ 只实现 2 种组件 (Engine 有完整组件库) | 需完善 | | 动态增删组件 | ✅ 分类菜单 | ❌ 无 | 需实现 | | 删除组件 | ✅ 右键 Remove | ❌ 无 | 需实现 | | Transform 编辑 | ✅ `drawVec3Control` | ⚠️ `DragFloat3` 简陋 | 需改进 | @@ -151,7 +151,7 @@ void InspectorPanel::RenderComponent(Component* component) { ``` **主要问题**: -1. 组件类型太少 (只有 TransformComponent, MeshRendererComponent) +1. Editor Inspector 面板只实现了 Transform 和 MeshRenderer 显示编辑,但 Engine 核心已有完整组件系统 2. 没有 Add Component 菜单 3. 没有 Remove Component 功能 4. 没有 CollapsingHeader 折叠 @@ -481,12 +481,12 @@ class EntityManager { }; ``` -**XCEngine 问题**: -1. 没有真正的 Scene 概念,只有实体列表 -2. 没有物理世界集成 -3. 没有 ECS 系统 (使用简单的 Component 基类) -4. EntityID 是简单递增整数,不是 UUID -5. 没有场景状态 (Edit/Play/Simulate) +**XCEngine 实际情况**: +1. ✅ 有 Scene 类和 SceneManager (见 engine/include/XCEngine/Scene/) +2. ❌ 没有物理世界集成 +3. ✅ 有 Component/GameObject 系统,但非 EnTT ECS (使用 dynamic_cast) +4. ✅ EntityID 是 uint64_t 递增整数,不是 UUID +5. ❌ Editor 没有场景状态 (Edit/Play/Simulate) 切换机制 --- @@ -592,7 +592,7 @@ AssetItem (只包含文件信息) | ProjectPanel | 60% | 文件浏览、网格显示、导航,但拖拽移动失效 | | ConsolePanel | 60% | 日志显示,缺少命令输入 | | MenuBar | 30% | 菜单结构存在,但所有项 stubbed | -| InspectorPanel | 15% | 只有 Transform 和 MeshRenderer 显示 | +| InspectorPanel | 20% | 只实现 Transform 和 MeshRenderer 编辑,但 Engine 核心有完整组件库 | | SceneViewPanel | 5% | 纯占位符 | | GameViewPanel | 5% | 纯占位符 | @@ -692,25 +692,25 @@ if (ImGui::Button("Add Component")) { **目标**: 实现完整的组件编辑功能 -#### 8.2.1 组件类型补充 +#### 8.2.1 Inspector 组件编辑支持 -需要添加的组件类型: +Engine 核心已有完整组件系统,Editor Inspector 需要添加对这些组件的编辑支持: -| 组件 | 复杂度 | 说明 | -|------|--------|------| -| TransformComponent | 已实现 | 需改进 UI | -| MeshRendererComponent | 已实现 | 需添加拖拽、预览 | -| CameraComponent | 中 | 投影、FOV、近远裁剪 | -| DirectionalLightComponent | 低 | 颜色、强度 | -| PointLightComponent | 低 | 颜色、强度、范围 | -| SpotLightComponent | 中 | 颜色、强度、范围、角度 | -| Rigidbody2DComponent | 高 | 物理引擎对接 | -| Rigidbody3DComponent | 高 | 物理引擎对接 | -| Collider2D/3D | 高 | 碰撞体 | -| SpriteRendererComponent | 中 | 2D 精灵 | -| CircleRendererComponent | 低 | 圆形渲染 | -| TextComponent | 中 | 文本渲染 | -| ScriptComponent | 高 | 脚本字段编辑 | +| 组件 | Engine 状态 | Inspector 编辑复杂度 | 说明 | +|------|------------|---------------------|------| +| TransformComponent | ✅ | 低 | 需改进 UI (drawVec3Control) | +| MeshRendererComponent | ✅ | 中 | 需添加拖拽、预览 | +| CameraComponent | ✅ | 中 | 投影、FOV、近远裁剪 | +| DirectionalLightComponent | ✅ | 低 | 颜色、强度 | +| PointLightComponent | ✅ | 低 | 颜色、强度、范围 | +| SpotLightComponent | ✅ | 中 | 颜色、强度、范围、角度 | +| Rigidbody2DComponent | ✅ | 高 | 物理引擎对接 | +| Rigidbody3DComponent | ✅ | 高 | 物理引擎对接 | +| Collider2D/3D | ✅ | 高 | 碰撞体 | +| SpriteRendererComponent | ✅ | 中 | 2D 精灵 | +| CircleRendererComponent | ✅ | 低 | 圆形渲染 | +| TextComponent | ✅ | 中 | 文本渲染 | +| ScriptComponent | ✅ | 高 | 脚本字段编辑 | #### 8.2.2 Transform UI 改进 @@ -734,11 +734,11 @@ ImGui::DragFloat3("##Position", transform->position, 0.1f); ``` 优先级: 中 预计工作量: 2-3 天 -依赖: RHI 完善后 +依赖: Scene 序列化框架 (Engine Scene 类已有基础 Serialize/Deserialize) ``` **需要实现**: -- Scene 序列化 (YAML/JSON) +- Scene 序列化到文件 (Engine 核心已有基础) - Scene 反序列化 - 资源路径管理 - Editor/Runtime 场景分离 @@ -862,15 +862,21 @@ void BosonLayer::onSceneStop() { ### 9.1 架构问题 -1. **Panel 独立设计 vs Layer 组合** +1. **Editor 和 Engine 使用两套不同的 GameObject/Component 系统** + - **Editor** (`editor/src/Core/GameObject.h`): 简化版,使用 `float position[3]` 数组存储变换 + - **Engine** (`engine/include/XCEngine/Components/`): 完整 ECS,使用 `TransformComponent` 组件 + - **后果**: Editor 无法直接使用 Engine 的组件系统,需要重新实现 + - **建议**: Editor 应复用 Engine 的 Components::GameObject/Scene 系统 + +2. **Panel 独立设计 vs Layer 组合** - Fermion: BosonLayer 组合所有面板,共享 Context - XCEngine: 各 Panel 独立,通过 SceneManager 单例通信 -2. **SceneManager 单例 vs Scene 指针传递** - - 单例方便访问,但耦合紧密 +3. **SceneManager 单例 vs Scene 指针传递** + - Editor 使用简化版 SceneManager,与 Engine 的 Scene 类不兼容 - 建议: 考虑使用 Context 模式传递 Scene 引用 -3. **缺少 BosonUI 自定义控件封装** +4. **缺少 BosonUI 自定义控件封装** - Fermion 有 ui::drawVec3Control, ui::drawFloatControl 等 - XCEngine 直接使用原生 ImGui API,代码重复 @@ -908,7 +914,7 @@ void BosonLayer::onSceneStop() { ### 长期 ``` -□ 完整的组件系统 +□ 完整的 Inspector 组件编辑界面 (Engine 核心组件已有) □ 场景序列化 □ 资源导入系统 □ 材质编辑器 @@ -917,6 +923,7 @@ void BosonLayer::onSceneStop() { □ TextureConfigPanel (纹理配置) □ AssetManagerPanel (资源注册表) □ SettingsPanel (编辑器设置) +□ Play/Edit/Simulate 模式切换 ``` --- @@ -930,4 +937,4 @@ void BosonLayer::onSceneStop() { --- *文档生成时间: 2026-03-24* -*最后更新: 2026-03-24 (补充缺失面板和系统差异分析)* +*最后更新: 2026-03-24 (更正 Component 系统描述,补充 Editor/Engine 架构问题)*