Skip to content

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:

IconKind
🎥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

ActionResult
ClickSelect this row (and make it the range anchor)
Shift + clickSelect the range from the anchor to this row
Cmd / Ctrl + clickToggle this row in/out of the selection
↑ / ↓Move the selection up/down one visible row
Shift + ↑ / ↓Extend the selection from the anchor
HDisable / enable the selected object(s)
Double-clickFrame 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, point and spot tick 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):

ItemShortcutNotes
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
RenameF2Single object only
Duplicate⌘D
FocusFFrame in the viewport
DisableH
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

Awaken — browser-native WebGPU game engine.