2.0 KiB
2.0 KiB
EntityCommands
命名空间: XCEngine::Editor::Commands
类型: header-helper
源文件: editor/src/Commands/EntityCommands.h
描述: 封装实体创建、重命名、删除、复制粘贴、重复和父子重挂接等场景编辑命令。
概述
EntityCommands 是当前 Scene 编辑工作流里最重要的一层命令辅助。
Hierarchy 面板、Edit 菜单和快捷键触发的实体级操作,最终大多落到这里。
当前覆盖:
- 创建空实体、Camera、Light
- 重命名与删除实体
- 复制、粘贴、重复实体
- 重挂接父节点并尽量保持世界变换
- 从父节点分离实体
当前实现
- 结构性修改统一通过
UndoUtils::ExecuteSceneCommand包装 - 创建实体后会自动把新实体设置为当前选中对象
CreateCameraEntity与CreateLightEntity会附加对应组件CanReparentEntity会阻止把对象挂到自己的子孙节点下ReparentEntityPreserveWorldTransform会缓存当前位置、旋转和缩放,再执行MoveEntity
设计说明
把实体编辑动作做成独立命令层,是编辑器架构里非常关键的一步。
如果直接在 Hierarchy 面板里 CreateEntity、DeleteEntity、MoveEntity,会很快遇到三个问题:
- 撤销历史无法统一
- 菜单栏、快捷键、右键菜单会重复同一逻辑
- 结构修改和 UI 交互代码缠在一起
EntityCommands 把“编辑行为语义”稳定下来,面板和 router 只需要负责调用它。
当前限制
CreateCubeEntity/CreateSphereEntity/CreatePlaneEntity在当前路由中实际上还是创建命名后的空实体,不会自动生成渲染组件- 粘贴和重复的深拷贝语义完全依赖
ISceneManager当前实现 - 多实体批量命令尚未覆盖