Files
XCEngine/docs/api/XCEngine/Editor/Commands/EntityCommands/EntityCommands.md

2.0 KiB

EntityCommands

命名空间: XCEngine::Editor::Commands

类型: header-helper

源文件: editor/src/Commands/EntityCommands.h

描述: 封装实体创建、重命名、删除、复制粘贴、重复和父子重挂接等场景编辑命令。

概述

EntityCommands 是当前 Scene 编辑工作流里最重要的一层命令辅助。
Hierarchy 面板、Edit 菜单和快捷键触发的实体级操作,最终大多落到这里。

当前覆盖:

  • 创建空实体、Camera、Light
  • 重命名与删除实体
  • 复制、粘贴、重复实体
  • 重挂接父节点并尽量保持世界变换
  • 从父节点分离实体

当前实现

  • 结构性修改统一通过 UndoUtils::ExecuteSceneCommand 包装
  • 创建实体后会自动把新实体设置为当前选中对象
  • CreateCameraEntityCreateLightEntity 会附加对应组件
  • CanReparentEntity 会阻止把对象挂到自己的子孙节点下
  • ReparentEntityPreserveWorldTransform 会缓存当前位置、旋转和缩放,再执行 MoveEntity

设计说明

把实体编辑动作做成独立命令层,是编辑器架构里非常关键的一步。
如果直接在 Hierarchy 面板里 CreateEntityDeleteEntityMoveEntity,会很快遇到三个问题:

  • 撤销历史无法统一
  • 菜单栏、快捷键、右键菜单会重复同一逻辑
  • 结构修改和 UI 交互代码缠在一起

EntityCommands 把“编辑行为语义”稳定下来,面板和 router 只需要负责调用它。

当前限制

  • CreateCubeEntity / CreateSphereEntity / CreatePlaneEntity 在当前路由中实际上还是创建命名后的空实体,不会自动生成渲染组件
  • 粘贴和重复的深拷贝语义完全依赖 ISceneManager 当前实现
  • 多实体批量命令尚未覆盖

相关文档