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 |
|---|---|
| 🎥 | Camera |
| 💡 | Light |
| ◼ | Mesh (has a MeshRenderer) |
| ○ | Empty (a bare Transform / group) |
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.
📸 Screenshot - save as img/editor-hierarchy.png
The Hierarchy panel with a nested scene: a camera, a light, and a parent object with several mesh children expanded, one row selected, and the filter bar at the top.
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 a 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.
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.
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.
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 - 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 |
| 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
- Prefabs - Save as Prefab, and dragging prefabs in
- Inspector - editing the selected object
- Keyboard Shortcuts - the full key reference