Structure Panel¶
The Structure panel is the editor's tree view for scenes and entities. It is also the
clearest way to understand Doriax's ECS model: everything shown under a scene is an
entity, but only entities with a Transform participate in the spatial hierarchy.
Scene root¶
The top node is the selected scene. Child scenes are shown before entities. If a child scene is expanded inline, its entities are shown under that child scene node.
Child scenes¶
A scene can reference other scenes as child scenes so they load and run together as one scene stack. Child scene nodes appear above the parent's entities, tinted soft teal to set them apart.
Add a child scene in one of two ways:
- Right-click the scene root and choose Add child scene → SceneName (the submenu lists every other scene that is not already attached).
- Drag a
.scenefile from the Resources Browser onto the scene root.
Right-click a child scene node for its menu:
| Action | Effect |
|---|---|
| Start active | Toggles whether the child scene is added to the engine automatically when the parent loads. On (the default) means it runs immediately; off means it is built but hidden until you call SceneManager.addChildScene at runtime. |
| Remove child scene | Detaches the reference (it does not delete the scene file). |
Each child scene row also shows a small play or pause mark next to the name: play means Start active is on; pause means it starts inactive. Hover the mark for a tooltip. Click the eye icon on a child scene node to load it inline — its entities appear nested under the node so you can view and edit them in the parent's context. This is an editing convenience and does not affect runtime behavior.
Order matters: scenes render as layers, with the main scene at the bottom and each child scene drawn on top of the ones listed above it — so the last child scene is the topmost layer. The order follows the order you added the child scenes; to change it, remove them and add them back in the sequence you want (top-most last). See Child scenes in the manual for the full runtime model.
Empty entity vs empty object¶

The create menu has two intentionally different entries:
| Entry | Components added | Meaning |
|---|---|---|
| Empty entity | None | A pure entity ID. Use it for logic, global scripts, non-spatial data, or components that do not need a transform. |
| Empty object | Transform |
A spatial entity. It can be positioned, parented, rendered, and shown in the hierarchy. |
This distinction matters because the entity itself owns nothing. Components decide what the ID can do.
The rest of the create menu adds ready-configured entities (camera, light, sky, fog, sound, mirror, reflection probe), basic shapes, 2D and UI objects, physics bodies, and more — each one is just an entity with the right components already attached.
The 2D submenu includes 2D Light and 2D Occluder for the 2D lighting system — see 2D Graphics — 2D lighting.
Basic shapes¶
Basic shape creates a mesh entity with procedural geometry: Box, Plane, Wall,
Sphere, Cylinder, Capsule, and Torus. A Plane lies flat (normal points up, +Y); a
Wall stands upright facing the camera (normal points +Z) — handy for walls,
backdrops, and mirror surfaces. You can change a mesh's geometry later from the
Create Shape dropdown in Properties.
Mirror¶
Mirror is a one-click convenience entry: it creates a Wall with a Mirror component already attached, giving an upright planar-reflection surface with no camera or texture setup. See Rendering Pipeline — Mirrors.
Reflection Probe¶
Reflection Probe creates an entity with a Transform and a Reflection Probe component: a box-shaped volume that gives the meshes inside it a local reflection environment instead of the global sky. Size the box to the room it represents in Properties. See Rendering Pipeline — Reflection probes.
Hierarchical area¶
Entities with Transform appear in the hierarchy area. Their parent-child relation is
stored in Transform::parent, and their order is managed by the scene registry. Moving
a parent updates child world transforms through that parent chain.
Common entities in this area include objects, sprites, models, cameras, lights, 3D sounds, physics bodies, UI widgets, points, lines, terrain, and mesh polygons.
Tree marks and collapse¶
| Mark | Meaning |
|---|---|
| Clone icon | The entity has an Instanced Mesh with one or more instances (tooltip shows the count) |
| Play / pause | Child scene Start active on / off (see Child scenes) |
Imported Model entities with child mesh nodes start collapsed once their children finish loading, so multi-mesh GLTFs do not flood the tree. Bones also start collapsed. Expand a row when you need to edit children.
When a parent is collapsed in Structure, clicking its hidden children in the Scene view selects the nearest expanded ancestor instead — so picking in the viewport matches what you can see in the tree. Expand the model (or other parent) if you need to select a specific child mesh.
Merge static model¶
Multi-node GLTF models normally create one child mesh entity per mesh node. Instanced Mesh (and other same-entity mesh features) only draw geometry that lives on the root entity, so those models need a flatten step first.
Right-click a Model entity in Structure:
| Action | Effect |
|---|---|
| Merge static model | Bakes child mesh transforms into the root MeshComponent, removes the child mesh entities, and sets the model's mergeStaticMeshes flag. Undoable. |
| Restore model mesh children | Reloads the model with the hierarchy restored (available after a merge). |
Merge is only available for static multi-mesh models. It is disabled (with a tooltip) when the model is skinned, animated, has morph targets, has fewer than two mesh nodes, or would exceed the root submesh limit. See 3D Graphics — Merging static model meshes.
Non-hierarchical area¶
Entities without Transform appear separately before the transform hierarchy. They are
valid scene entities, but they do not have a spatial parent or local/world transform.
Typical non-transform entities include:
| Entity type | Why it may not need Transform |
|---|---|
| Empty entity | Logic-only entity or script host |
| Sound source | Non-spatial audio |
| Sky/Fog | Scene environment data |
| Joints | Constraint data linking physics bodies |
| Actions/animations | Time-based behavior targeting another entity |
| Particles action | Playback behavior targeting another entity |
An entity can be selected and inspected even if it is not in the transform hierarchy.
Add a Transform if it should become spatial or parentable.
Drag and drop rules¶
Reparenting is a transform operation. Dragging an entity under another entity only
makes sense when the moved entity has Transform. Non-transform entities can still be
reordered in their separate area or associated virtually with a target, such as an
action targeting a transformed entity.
Drag and drop also crosses window boundaries:
| Drag | Drop | Result |
|---|---|---|
| Entity (or selection) from Structure | Resources Browser | Saves the hierarchy as a .bundle file and replaces it with a bundle instance |
| Entity from Structure | Entity-reference field in Properties | Assigns the entity to that field |
| Entity from Structure | Script file in the Code Editor | Inserts an entity reference property (details) |
| Action entity from Structure | Animation Timeline tracks | Adds an action frame at the dropped track and time |
.bundle file from Resources |
Scene root or an entity with Transform |
Creates a bundle instance there |
.scene file from Resources |
Scene root | Adds it as a child scene |
Bundles in the tree¶
A bundle instance appears as a root node with its member entities nested under it. Editing members edits the bundle (and every other instance); right-click menus on bundle nodes let you Insert into bundle, Remove from bundle, or move outside entities into a bundle with Insert to Bundle. See Bundles for the complete workflow.
Practical model¶
Use the Structure panel as a quick diagnostic:
- Entity appears in the tree hierarchy: it has
Transform. - Entity appears above the hierarchy: it has no
Transform. - Entity cannot be parented: add
Transformor choose Empty object instead. - Visual entity is missing from the hierarchy: check whether
Transformwas removed.