Files
XCEngine/docs/api/XCEngine/Editor/ComponentEditors/ComponentEditors.md

4.6 KiB
Raw Blame History

ComponentEditors

命名空间: XCEngine::Editor

类型: submodule

源目录: editor/src/ComponentEditors/

描述: Inspector 组件编辑器子模块,负责把运行时组件映射为编辑器侧的专用检查器 UI、添加/移除策略和交互式修改入口。

概述

ComponentEditors 是当前 Inspector 扩展体系里最重要的一层。它的职责不是保存组件数据,而是决定“某个组件在编辑器里应该如何被看见和编辑”。

按当前实现,这条链路很清晰:

  1. InspectorPanel 遍历选中对象上的组件。
  2. ComponentEditorRegistry 负责查找匹配的 editor。
  3. 每个具体 editor 只处理自己负责的组件类型。
  4. 若 editor 报告发生修改,InspectorPanel 会标记场景 dirty。

这和商业编辑器常见的 custom inspector / details customization 设计非常接近。这样做的直接收益是,复杂组件不会把 InspectorPanel 本身变成一个巨大的 switch

当前调用链

InspectorPanel.cppInspectorActionRouter.h 的实现:

  • ComponentEditorRegistry::Get().FindEditor(component) 决定当前组件由谁绘制。
  • editor 的 GetDisplayName() 决定 Inspector 组件节标题。
  • editor 的 Render(...) 负责真正的字段 UI。
  • Add Component 菜单通过 ComponentEditorRegistry::Get().GetEditors() 遍历所有可显示 editor。

已建立的 canonical 页面

页面 说明
IComponentEditor 组件编辑器统一契约。
ComponentEditorRegistry editor 注册中心与查询入口。
TransformComponentEditor Transform 组件 Inspector。
CameraComponentEditor Camera 组件 Inspector。
LightComponentEditor Light 组件 Inspector。
AssetReferenceEditorUtils 资产引用属性行 helper。
MeshFilterComponentEditor MeshFilter 组件 Inspector。
MeshRendererComponentEditor MeshRenderer 组件 Inspector。
VolumeRendererComponentEditor VolumeRenderer 组件 Inspector。
ScriptComponentEditor Script 组件 Inspector 与脚本字段编辑入口。
ScriptComponentEditorUtils 脚本组件编辑器辅助规则与格式化 helper。

当前源码对齐情况

ComponentEditorRegistry.cpp 当前实现registry 实际注册的 editor 包括:

  • TransformComponentEditor
  • CameraComponentEditor
  • LightComponentEditor
  • MeshFilterComponentEditor
  • MeshRendererComponentEditor
  • VolumeRendererComponentEditor
  • ScriptComponentEditor

这说明当前组件编辑器系统已经不再只覆盖基础三组件,而是已经承载 mesh、volume 与脚本组件的 Inspector 逻辑。当前 canonical 树已经把这些渲染组件 editor、脚本组件 editor 和它们共用的资产引用 helper 都补齐了。

ScriptComponentEditor 的特殊性

ScriptComponentEditor 是这个子模块里最依赖运行时元数据的一页。它不是直接读取 ScriptComponent 的本地成员列表,而是通过 ScriptEngine 查询:

  • 当前脚本类是否已分配、可用或缺失。
  • 脚本字段元数据。
  • 默认值、stored override 与 live managed value 的合成结果。
  • StoredOnlyTypeMismatch 一类问题状态。

因此它也是当前 ComponentEditorsScripting 子模块之间最重要的交汇点之一。

设计说明

把组件编辑 UI 拆成独立 editor 类型,有几个非常现实的好处:

  • 不同组件可以拥有完全不同的 Inspector 交互形态。
  • Add / Remove 规则可以跟组件类型一起定义。
  • 像脚本组件这种依赖运行时元数据的复杂面板,不会污染整个 Inspector 主循环。

当前限制

  • ComponentEditorRegistry 仍然是构造函数里手工注册,不是插件式发现机制。

相关文档