场景树
概述
场景树(Scene Graph)以树结构管理游戏/UI对象的父子层级,核心价值是通过父子关系自动传播 Local → World 坐标变换,适合层级明确的对象和UI系统。
关键内容
- 核心三件事:父子关系表达(AddChild/SetParent);局部变换→世界变换传播(
WorldMatrix = ParentWorld * Local);递归更新(DFS遍历 UpdateWorldRecursive) - 关键实现细节:SetParent 时可选 keepWorldTransform 以避免对象跳位(新local = inverse(newParentWorld) * oldWorld);用
unique_ptr管理子节点所有权避免内存混乱;dirty flag 优化避免全量重算;节点删除默认连子树一起删 - 与 ECS 的关系:非二选一,常见混合方案——ECS 存储数据和系统,Transform 组件中保存 parent/children,层级关系仍为树形;大量粒子/子弹等批处理对象不适合场景树,改用 ECS 数组或 Job System
- 更新阶段划分:PreUpdate → Update → LateUpdate → TransformPropagation → Render;场景树负责组织世界,渲染器负责绘制(不要耦合)
来源
- C++ 游戏引擎搭建指南 — 详细介绍场景树结构、变换传播算法、与ECS混合方案及常见坑
相关
- 游戏引擎架构 — 场景树是引擎场景层的核心组织方式
- ECS架构 — 与场景树互补的数据导向场景组织方案
- Dear ImGui — 编辑器 Hierarchy 面板可视化场景树