Hierarchy
The Hierarchy is the scene tree - every GameObject in the current scene, nested by parent-child relationship. It is where you select, rename, reparent, filter, and organise objects.
The tree is virtualized: only the rows near the scroll position are actually mounted, so a scene with 13,000+ objects (a large imported world) stays responsive.
The tree
Each row is one GameObject, indented by its depth, with a twisty (▶/▼) to fold or unfold its children. An icon shows the object's kind at a glance:

| Icon | Kind |
|---|---|
| ◱ | Screen (has a UIScreen) |
| ▭ | UI element (has a UINode) |
| 🎥 | Camera |
| 💡 | Light |
| ◼ | Mesh (has a MeshRenderer) |
| 📁 | Folder: a Transform and nothing else, holding children or at identity (see Folders) |
| ○ | Empty, or an object whose components have no icon of their own |
Layout labels. Screens that share a name are layout variants of one screen, so without help they read as identical rows (three ◱ Home in a row). Each one shows its window-size range after its name, in a small muted label: < 0.62, 0.62–1 or ≥ 1 for aspect (width / height), and h ≥ 700, h < 560 or h 560–700 for view height when that is set. Hover the label for the sentence it stands for, for example "Layout used when width/height is 0.62 to 1". A minimum counts as inside the range and a maximum does not, the way the variant picker settles two variants that meet at one limit. A screen alone under its name has no label. The Screens tab list shows the same labels.
Disabled objects are dimmed. When a new scene or imported pack populates the world, the tree folds to just the top level so you are not dropped into thousands of expanded rows; selecting an object elsewhere (for example clicking it in the Viewport) expands its ancestors and scrolls its row into view.
A generator's output is folded away too. Objects a script builds at runtime arrive after the scene has loaded, so the initial fold never saw them: a world script streaming in fifty chunks would otherwise bury the handful of objects someone actually authored. Such a parent folds the first time its generated children appear, and only once - open it and it stays open. The children stay selectable, because being able to click a chunk and look at what was built is the point of showing them at all.

Selecting
| Action | Result |
|---|---|
| Click | Select this row (and make it the range anchor) |
| Shift + click | Select the range from the anchor to this row |
| Cmd / Ctrl + click | Toggle this row in/out of the selection |
| ↑ / ↓ | Move the selection up/down one visible row |
| Shift + ↑ / ↓ | Extend the selection from the anchor |
| H | Disable / enable the selected object(s) |
| Double-click | Frame the object in the viewport |
Selection is shared with the Viewport and Inspector - whatever you pick here shows its components in the Inspector, and vice-versa. Double-click a row to frame that object in the Editor view.
Filtering
Two filters at the top of the panel narrow the tree.
A name search shows only rows whose name matches, plus the ancestors leading to each match and the match's whole subtree. Matches are force-expanded so they are visible. Esc clears it.
Beside it is a filter popover built from what the scene actually contains, rather than from a fixed list of types. It reads the component registry, so a component added later - by the engine, an importer, or a plugin - becomes filterable with no special-casing: it appears in the popover as soon as some entity in the scene has one.
Each entry is a tick box, and a component that declares a field worth drilling into also lists its values, with a count each:
- Light ticks every light; under it,
directional,pointandspottick only that kind. - ParticleEmitter drills into which effect an emitter plays.
- Script drills into which scripts an object carries, and an object with two scripts is findable under both.
Only fields whose value names something are drilled into (asset references, enums, and strings). A number or a vector identifies nothing - nobody goes looking for "the lights with intensity 1.4" - so those components stay a plain has-it or hasn't-it tick.
An entity whose drill-in field is empty lands in a none bucket rather than vanishing. An emitter with no effect assigned still has to be findable, and "why is nothing coming out of this thing" is exactly when you go looking for it.
While filtering, the count beside the filters shows the number of matches; otherwise it shows the number of top-level objects.
Reparenting and reordering
Drag any row to move it. As you hover another row, the drop lands in one of three zones based on where in the row you are:
- Before / After reorder the object among its siblings.
- Into reparents the object as the last child of the row you drop on.
- Dropping onto the empty area (or the tree's root zone) moves the object to the top level, last.
You cannot drop an object onto itself or one of its own descendants (that would create a cycle) - those drops are ignored. Reparenting works during Play too; like all play-time edits, the change is cached and kept-or-discarded when you Stop.
The order is the scene's order
The Hierarchy keeps no order of its own. It lists siblings in the world order (World.entityOrder()): one sequence of every object in the scene, which is also the order the scene file lists them in and the order UI draws in. A reorder is an edit to the scene like any other: it is one undo step, it is saved with the scene, and it changes what draws on top at once, the same as after a save and reload.
- A drag moves the object with everything under it, as one block. Dropped after a sibling, it goes after that sibling's whole subtree.
- New objects (created, duplicated, pasted, instanced) join at the end of their parent's subtree, so they are its last child. A duplicate or paste lands at the top level, last.
- Undoing a delete puts the objects back where they were in the order, not at the end.
- A project saved before this keeps its order: the file's order is the world order it loads with, so its rows, its UI stacking and
api.findanswer as they did. Saving it again without changes writes the same entity list.
Which rows draw on top. For UI, a row lower in the Hierarchy draws over the rows above it: of two sibling elements, the lower one is on top, and an element that follows its parent draws inside it and over it. A UINode.z other than 0 comes first: a higher z sits on top whatever the order. The same order decides which of two objects with one name api.find returns: the higher row.
In a project made before this, a parent's children can sit far apart in the file, so a lower row can still draw under a higher one that belongs to another parent. Dragging a row, or grouping rows into a folder, gathers its subtree into one block.
You can also drag a prefab or mesh from the Asset Browser into the Hierarchy - it is instantiated at the camera focus (where you are looking). Scripts and materials are not tree drops; drop those onto the Inspector.
Folders
A folder is an object with a Transform at identity (position 0, no rotation, scale 1) and no other component. It groups what is under it and moves nothing: a child's world transform under an identity parent is its own local transform. Nothing in the scene format or the runtime is special about it; any Transform-only object with children shows the 📁 icon.
- Create ▸ Folder (the + menu or right-click on empty space) makes an object named
Folderat identity under the selected object's parent, right after the selection, and selects it. Create Child ▸ Folder makes one inside the row. - Group into Folder (⌘G, or the row menu) wraps the selected objects in a new folder under their common parent, as one undo step. Each keeps its world transform; one already under that parent keeps its local transform exactly. The folder takes the place of the first selected row, and the rows keep their order inside it. A selected object under another selected object goes with its parent.
Disabling a folder disables the objects under it for rendering and physics, but it does not hide UI under it: hide a screen with UIScreen.visible instead.
Right-click menu
Right-click a row for its context menu (batch actions apply to the whole selection when several rows are selected, shown as a (N) suffix):
| Item | Shortcut | Notes |
|---|---|---|
| Create Child ▸ | - | The full create palette - Folder, primitives, Empty, lights, Camera, a 2D ▸ submenu (Sprite, 2D Camera), and a UI ▸ submenu (Text, Panel, Button, Image) - added as a child of this row |
| Rename | F2 | Single object only |
| Duplicate | ⌘D | |
| Focus | F | Frame in the viewport |
| Disable | H | |
| Enable | - | |
| Isolate | - | Disable everything except the selection |
| Group into Folder | ⌘G | See Folders |
| Save as Prefab | - | Single object only - see Prefabs |
| Delete | ⌫ |
Right-click empty space for the area menu: Create ▸ (the same palette), Paste (⌘V), and Show All (re-enable every disabled object - the counterpart to Isolate).
See also
- GameObjects & Components - what each row represents
- Transforms & Hierarchy - how parenting affects transforms
- In-Game UI - screens, layout variants, and what draws on top
- Prefabs - Save as Prefab, and dragging prefabs in
- Inspector - editing the selected object
- Keyboard Shortcuts - the full key reference