docs: 更正 Editor 设计文档中的 Component 系统描述

- 更正: Engine 核心已有完整组件系统,Editor Inspector 只是未完善
- 补充: Editor 和 Engine 使用两套不同的 GameObject/Component 系统 (重大架构问题)
- 补充: Scene 序列化依赖描述修正
- 补充: 架构问题中新增 Editor/Engine 系统差异分析
This commit is contained in:
2026-03-24 18:20:10 +08:00
parent 4daed24a05
commit 612342d170

View File

@@ -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 架构问题)*