Roadmap

Each phase ends with something you can run.

The engine's plan and the editor's, as the repository has them today. 2 of 7 engine phases are done; the rest land a slice at a time.

Commits per day

04080120160Oct 24: 11 commitsOct 24Oct 25: 9 commitsOct 25Oct 26: 58 commitsOct 26Oct 27: 30 commitsOct 27Oct 28: 126 commitsOct 28Oct 29: 50 commitsOct 29Oct 30: 1 commitOct 30

Engine

  1. Phase 0 Done done Oct 24, 2026

    Foundation

    Milestone: a window, plus a C# Debug.Log call printed by the Rust host.

    The plan for this phase
    • Cargo workspace, CI, logging, frame timing, winit window, input, main loop with a fixed step.
    • Performance groundwork: Tracy integration, criterion benchmarks in CI, release/dev build profiles (LTO, fast linker, optimized dependencies in dev), mimalloc, and a per-frame allocation counter.
    • dotnet/ solution skeleton, xtask building both sides, hostfxr "hello from C#."
    • Conformance harness skeleton: one Unity project that logs lifecycle order, plus a trace diff runner.
    • Milestone: a window, plus a C# Debug.Log call printed by the Rust host.
  2. Phase 1 Done done Oct 24, 2026

    Object model and core API

    Milestone: lifecycle, coroutine and math conformance suites pass, measured against Unity recordings. A scene can be built and undone through CLI commands.

    The plan for this phase
    • world crate: GameObjects, components, hierarchy, activation, deferred destroy, with dense per-type component storage and dirty-flag transform updates.
    • Job system and frame task graph. Parallel transform updates.
    • Interop benchmarks: target a few nanoseconds per hot call, zero allocations per frame in the UnityEngine layer.
    • Managed UnityEngine.Object with fake null, GameObject, Component, Transform, MonoBehaviour.
    • The full lifecycle player loop, the callback-table source generator, [DefaultExecutionOrder].
    • Unity math types, matched against recorded Unity values.
    • Time, Debug, Mathf, Random, coroutines.
    • editor_core v0: the command bus, the first commands (create/destroy/reparent GameObject, add component, set field), undo/redo, change events, a headless CLI.
    • Milestone: lifecycle, coroutine and math conformance suites pass, measured against Unity recordings. A scene can be built and undone through CLI commands.
    The update
  3. Phase 2 In progress planned for 1–2 months

    Rendering core

    Milestone: a scene built entirely from unmodified Unity-style C# scripts renders in 3D and 2D, and an AI agent can build and playtest a scene over MCP before the GUI exists.

    The plan for this phase
    • wgpu renderer with a render graph and a left-handed camera, with sorted and instanced draws, pooled buffers, parallel command encoding, and frame pipelining (simulate N+1 while rendering N).
    • Camera, MeshFilter/MeshRenderer, Material (basic lit/unlit), Light, SpriteRenderer.
    • glTF and FBX import, textures, primitive meshes (GameObject.CreatePrimitive).
    • mcp_server v0: scene.query, scene.edit (atomic batches), play.* (enter/exit/step N frames), view.screenshot, console. Runs headless. Done early (2026-10-24); view_screenshot added 2026-10-25: tassix_mcp serves scene_query, scene_edit, scene_undo/scene_redo, play_enter, play_step, play_exit and console_read. Play mode instantiates the edited scene with real scripts (fields deserialized before Awake, references by id) and discards it on exit, as in Unity.
    • Milestone: a scene built entirely from unmodified Unity-style C# scripts renders in 3D and 2D, and an AI agent can build and playtest a scene over MCP before the GUI exists.
    All 4 updates
  4. Phase 3 In progress planned for 2–3 months

    Gameplay systems

    Milestone: a Roll-a-Ball-style tutorial game and a 2D platformer run from unmodified Unity scripts. An agent can write a script, compile it, and verify it by playtesting.

    The plan for this phase
    • Physics and Physics2D with Unity's collision/trigger semantics, raycasts, layers.
    • Legacy Input, AudioSource, SceneManager, Resources, Instantiate of prefabs, PlayerPrefs, JsonUtility.
    • Awaitable, SendMessage, tags and layers.
    • MCP: script.* (create/edit/compile with Roslyn diagnostics, compatibility-matrix lookup), input injection for play.*, asset.* basics.
    • Milestone: a Roll-a-Ball-style tutorial game and a 2D platformer run from unmodified Unity scripts. An agent can write a script, compile it, and verify it by playtesting.
    All 5 updates
  5. Phase 4 In progress planned for 2–3 months

    Project import (L2) and editor

    Milestone: open a small Unity project folder, press play, edit a script while it runs, while an agent works in the same session and its edits show up for review.

    The plan for this phase
    • unity_yaml: read .unity, .prefab, .asset, .meta, the GUID database, prefab instances and overrides.
    • Unity serialization rules shared by scene loading and hot reload.
    • egui editor as a client of editor_core: hierarchy, inspector (from generator metadata), scene view, gizmos, play mode.
    • Human-in-the-loop features: live agent presence, a review panel (accept/revert per agent transaction), permission levels, approval for destructive operations.
    • MCP resources with subscriptions, prompts, and the exec tool (C# snippets via Roslyn scripting).
    • C# hot reload via collectible ALC, with state preserved.
    • .asmdef support and .csproj generation for IDEs.
    • Milestone: open a small Unity project folder, press play, edit a script while it runs, while an agent works in the same session and its edits show up for review.
    All 22 updates
  6. Phase 5 Ongoing

    Extended API and rendering

    The plan for this phase
    • Input System API, Animator + .controller import, ParticleSystem subset, uGUI + TextMeshPro subset, NavMesh.
    • PBR closer to URP's Lit look, shadows, HDR, bloom, 2D lights.
    • GPU-driven rendering where supported: GPU culling (frustum + Hi-Z occlusion), indirect draws, bindless materials, mesh LODs.
    • Compatible high-performance APIs: Unity.Collections, Unity.Mathematics, C# Job System interfaces on the Rust job system.
    • Cooked rkyv asset format with memory-mapped streaming.
    • Benchmark scenes with frame-time budgets gating CI, and comparison runs against Unity.
    All 32 updates
  7. Phase 6 Ongoing

    Binary compatibility and shipping

    The plan for this phase
    • L3: Unity-named module assemblies with type forwarding, so common precompiled plugins load.
    • NativeAOT builds, asset cooking, packaged players, documentation, the public compatibility matrix.
    • A splash screen showing the Tassix logo while a player starts (below).
    All 72 updates

Editor

Unity editor parity, in the order people miss it: everyday editing first, then whole workflows, then specialised windows. Every edit is an editor command first, so agents get it over MCP with undo and review.

  1. Phase 1 Everyday editing Done
  2. Phase 2 Prefabs and assets Done
  3. Phase 3 Project settings and building Done
  4. Phase 4 Specialised windows Done
  5. Phase 5 Polish Done
  6. Phase 6 What’s still missed Done
  7. Phase 7 The project’s own assets In progress

Next up

38

Avatar Masks

Create > Avatar Mask, and its Inspector: the animated object's Transforms as a tree of checkboxes, saved into the .mask as Unity writes it; the Layers tab picks it. Done when a masked layer leaves an unticked object as the layer below has it.

Shipped in the editor

2D tools

The Sprite Editor (Window > Sprite Editor, beside the Scene view) shows the texture picked in the Project pane with its sprites outlined, and slices it Grid By Cell Size (cell size, offset, padding, empty cells left out unless kept) into its .meta as Unity does: Sprite type, Sprite Mode Multiple, a sprite per cell named <texture>_<n> with its own ID (kept when the sheet is sliced again), one undo step. The Tile Palette (beside the Inspector) lists the project's Tile assets by their sprites, makes a tile for each sprite of a sliced sheet (Assets/Tiles, as Unity writes Tile assets), and has Paint and Erase brushes for the Scene view: the cell under the pointer is outlined, a click or drag gathers cells and letting go paints or clears them on the active tilemap as one undo step. Create Tilemap (and GameObject > 2D Object > Tilemap > Rectangular) makes a Grid with a Tilemap under it. Tilemaps draw in edit mode and save into .unity files as Unity writes them (m_Tiles indexing shared tables of tiles, sprites, matrices and colours, with bounds), and new sprite and tilemap renderers save with Sprites-Default. The Rect tool (T) puts a box around what the selection draws, with corner and side handles that resize it (the opposite side held, the pivot keeping its place in the box) and its inside to move it, one undo step. Unity 6000.3 read the sliced sheet, the tiles and a painted, saved tilemap back the same. Not yet: Automatic and By Cell Count slicing, editing a sprite's rect, pivot or border by hand, palettes as Unity keeps them (prefabs), box and fill brushes, and the Rect tool on RectTransforms.

Animator

Window > Animator, a tab beside the Scene view: the controller of the selected object's Animator as Unity's graph of its base layer: Entry pointing at the default state, Any State, Exit, the states (the default one amber) and the transitions between them as arrows (side by side when two states go both ways). States drag; a state's menu makes a transition (a line follows the pointer to the state clicked), makes it the default, or deletes it (with its transitions); the graph's menu makes a state, empty or playing one of the project's clips; dragging the background pans; Delete removes what's picked. Beside the graph: the parameters (Float, Int, Bool, Trigger), renamed in place (conditions on them follow) with their defaults, and what's picked: a state's name, motion and Set as Layer Default State, or a transition's exit time, duration and conditions (a parameter, Unity's tests for its type, a threshold). Every change writes the .controller, changing only the documents it's about (other layers, sub-state machines and blend trees stay as written), and is one undo step that puts the file back. While playing, the state the Animator is in is outlined with a bar of how far through it is, and a transition under way is lit. Not yet: other layers and sub-state machines, blend trees, transition offsets, interruption settings and solo or mute.

Animation

Window > Animation, a tab beside the Console: for the selected object (or the nearest one above it with an Animator), the clips its Animator's controller plays; an object without one gets an Animator, a controller and a clip from Create (Assets/<name>.anim and .controller, as Unity writes them, the controller's one state playing the clip). The clip's Transform properties (position, rotation as Euler angles, scale, of the object and anything under it) are rows with their values at the playhead, added from Add Property (keyed at the start and the end) and removed from their menu; the timeline shows their keys and a summary row of all of them, in seconds and frames, keys dragged to another frame, added by double-clicking a row, deleted from their menu. The ruler scrubs, Play loops the clip, and while Preview is on the Scene view shows the object as the clip has it at the playhead (the scene keeps its own values). Record turns a Transform edit of an animated object (handles or the Inspector) into keys at the playhead instead of a scene edit; Add Keyframe keys every property there. Every change writes the .anim (only its Transform curves, editor curves, bindings and length; other curves, events and settings stay as written) and is one undo step that puts the file back. Not yet: properties other than the Transform's, tangents (keys are smooth), making more clips for a controller, and handles following the previewed pose.

Curves and gradients

AnimationCurve, Gradient and a particle system's MinMaxCurve and MinMaxGradient fields show as a thumbnail (a particle setting with Unity's modes in a drop-down beside it: a constant, a curve, or a random pick between two; a colour, a gradient, two of either, or a random colour); clicking it opens a curve or gradient window beside the Inspector. A curve's keys drag (between their neighbours), double-click adds one on the curve, their menu flattens, smooths or deletes them, and the picked key's tangent handles, time, value and tangent edit it; a particle curve's multiplier is there too, and two curves show as the band between them. A gradient's colour keys sit below its bar and its alpha keys above, dragged along it, added by clicking beside it (eight of each at most), the picked one's colour or alpha and location below, with Blend or Fixed. Each edit is one command when the pointer lets go. Every particle module is listed in the Inspector, as Unity lists them, folding open into its settings (each at its default until set).

Lists and arrays edit as lists

Each element with its type's editor, added, removed, duplicated and reordered by dragging, references dropped on from the Hierarchy (Unity parity, phase 1).

A project's own classes and structs fold open into their fields, each with its editor, at any depth

Lists inside them too:

Unity's field attributes

[Header], [Space], [Tooltip], [Range] (a slider), [Min], [TextArea] and [Multiline], [ColorUsage] (alpha), [HideInInspector].

Tags and layers by name, from the project's TagManager; LayerMask fields as layer checkboxes

Asset inspectors

A material picked in the Project pane shows its shader, colours, numbers (0 to 1 ones as sliders), textures with tiling and offset, and keywords, each edit saved as the one line it changes in its .mat, the scene showing it straight away; a texture shows its picture and its import settings (type, sRGB, mip maps, wrap, filter, max size), saved into its .meta. A model shows its import settings (scale factor, units, blend shapes, animation, its type, material creation), its scale factor applied to its meshes and parts as Unity bakes it and its instances in the scene taking it at once; an audio clip shows its waveform with a play button and playhead, and its import settings. A material's preview is the engine's render of a ball in it, and its shader is picked from Unity's built-in ones, the pipeline's and the project's. Models can be placed in a scene as prefabs are, and framing a selection fits its meshes.

Previews and the object picker

Every reference field's picker (assets, scene objects, prefabs) opens with a search field, focused and empty, that narrows its list as you type; an asset picker shows each candidate's thumbnail. The Project pane shows its files as a list or as a grid of tiles, each a thumbnail (a texture's picture, a material's ball in its colour, else its kind's icon) over its name; thumbnails are read a few a frame and kept until their file changes.

All 54 shipped items
Project Settings

Edit > Project Settings, a tab beside the Scene view: Tags and Layers, Physics and Physics 2D (gravity, and the layer collision matrix as Unity's triangle of checkboxes), Time, Quality (the level and its vsync, anti-aliasing and shadows), the Input Manager's axes (each field, added and removed) and the Player's company, product name and default icon, read from the project's ProjectSettings files and each edit saved as the line it changes. The runtime applies a changed file at once (editor_settings_changed), so the next play obeys it. Agents can't change these over MCP yet.

Build Settings

File > Build Settings, a tab beside the Scene view: the scenes in the build, ticked in or out, reordered and removed, the open one added, saved into EditorBuildSettings.asset (the runtime takes the new order at once); and Build, which packages the project into a folder with the player and runtime the editor runs on, on its own thread with its steps in a progress bar, then offers to show the game in its folder. The packaging is tassix_package, shared with cargo xtask package (which keeps the NativeAOT step).

Lighting

Window > Lighting, a tab beside the Inspector: the open scene's RenderSettings as Unity's Environment tab has them: the skybox material (Unity's default, none or the project's), ambient light from the skybox, a gradient or a colour, reflections (source, resolution, intensity, bounces), fog (colour, mode, its start and end or density), halo and flares. Each change is the SetRenderSettings command agents use, one undo step, and shows in the Scene and Game views at once; a setting put back to its default is cleared from the scene.

Navigation

A NavMeshSurface's Inspector has Bake and Clear, as Unity's; a bake builds it in the edit scene (editor_navmesh), says its triangles and walkable area, and the Scene view draws the navmesh over the scene in translucent blue, depth-tested, until it's cleared or baked again. The bake isn't saved with the scene yet (Unity keeps it as a NavMeshData asset); play bakes surfaces as they start.

Profiler

Window > Profiler, beside the Console: while playing, each frame's time split into the game's scripts, its physics (the 3D and 2D steps, timed in the script host), rendering the views and the editor's own UI, a stacked bar per frame over the last 300 with lines at 60 and 30 fps; Record and Clear; a click picks a frame and shows its parts. A slow script's frames stand out as tall blue bars.

Scene view

Pivot or Center (Z; in Center a rotation turns the selection about its middle), Global or Local (X), the Transform tool (Y: move arrows, rotation rings beyond them, a uniform scale at the centre), snapping by vertex (hold V: the selection's vertex nearest the pointer carried onto the nearest vertex of what's under it), draw modes (Shaded, Wireframe, Shaded Wireframe), the selected camera's view in the bottom-right corner, GameObject > Move To View, Align With View and Align View to Selected, and the Hierarchy's eye and lock (hidden objects leave the Scene view but not the Game view; hidden and locked ones aren't picked, a click going through to what's behind). Visibility isn't kept between sessions yet.

Several scenes at once

A Unity scene's Open Scene Additive (the Project pane's menu) opens it beside the open one, its objects under its own row in the Hierarchy (folding away; Remove Scene closes it), drawn and edited with the first's (its ids start after the first's, first_id on export). Saving writes each scene's objects into its own file, and rebuilds (prefabs, model settings) carry every scene through. Not yet: moving objects between scenes, choosing the active scene (new objects go in the first), and play loading them as separate scenes.

Inspector extras

Lock keeps the Inspector on the object it shows whatever's selected; Debug shows each component's instance ID and a script's private fields that aren't serialized (read-only, from the runtime: editor_debug); a component's menu has Reset (its fields back to their defaults) and Move Up and Move Down (taken out and put back with the same id and fields), each one undo step; and the Name field shows a dash across objects whose names differ. Debug mode shows the edit scene's values (the live Inspector while playing doesn't have it yet).

Preferences

Edit > Preferences, a tab beside the Scene view: the theme, the External Script Editor (a program and its arguments, $(File), $(Line) and $(Project) filled in; VS Code, else the system's, when none), the Scene view's grid (shown, how strongly), its colours (the selection outline, wireframe, navmesh; each back to the theme's with Reset), and the editor's shortcuts, each changed by clicking it and pressing the keys (Escape leaves it, Backspace takes it off, Reset gives back the editor's own, two on the same keys said so). The menus show the shortcuts in force; everything's saved with the preferences.

Sub-state machines

Unity parity, phase 7: the Animator window shows a layer's sub-state machines as nodes (a box with cut corners), dragged as states are; a double-click goes in, to its own states (made, linked and made its default as the layer's are), and a breadcrumb above the graph (and the corner's name) goes back out. Create Sub-State Machine in the graph's menu; Make Transition from a state onto one goes into it (its default state plays); Delete Sub-State Machine takes everything in it with it. Transitions out of one to the states around it (Unity's Up node) aren't made in the window yet.

Clips and controllers in the Inspector

Unity parity, phase 7: a clip picked in the Project pane shows Loop Time (written into the .anim, an undo step; the runtime plays a clip without it once and holds its end), its length and sample rate, what it animates and its events (edited in the Animation window). Loop Pose and a clip's own Cycle Offset aren't offered: the runtime doesn't use them (a state's Cycle Offset it does). A controller shows its layers (blending, weight, how many states) and parameters, and Open in Animator shows it in the Animator window while the selection has no controller of its own.

ScriptableObject assets

Unity parity, phase 7: a project's .asset data picked in the Project pane shows its script and its fields in the script's order, with the editors a component's have (Unity's attributes too), each edit written into the file as Unity writes it (editor_data_asset_save, the rest of the file as it was) as an undo step; the project's ScriptableObjects with [CreateAssetMenu] are in the Project pane's Create menu, in submenus as their menu names have them, making a new asset named as the attribute says.

Build And Run and Search

Unity parity, phase 6: File > Build And Run (Ctrl+B, and beside Build in Build Settings) packages the project as Build does, into Build Settings' folder, then starts the game; the build is followed every frame, whatever pane shows. Search (Ctrl+K) is one field over the scene's objects, the project's assets and the editor's menu commands, the matches under Scene, Project and Menu (those starting with what's typed first); the arrow keys move through them, Enter or a click goes to one (an object selected, an asset in the Inspector, a command run), Escape closes it.

Animator layers and blend trees

Unity parity, phase 6: the Animator window's Layers tab (beside Parameters) lists the controller's layers, a click showing one's graph; + adds one (its own state machine, all its weight), its menu deletes it; the shown layer's name, weight, Override or Additive, and Avatar Mask. Create State > From New Blend Tree makes a state playing a blend tree (1D on the first Float parameter, or a new Blend one); its settings give the blend type (1D, the 2D kinds, Direct), its parameters, and its motions, each a clip with its threshold (a position in 2D, a parameter for Direct), + adding and − removing one. Each change writes the .controller as Unity does (fields the window doesn't show kept) and is an undo step; the runtime plays them.

Animation events

Unity parity, phase 6: the Animation window's Events row under the ruler: Add Event at the playhead (or a double-click on the row), each event a marker that's picked by a click, dragged to another frame and deleted from its menu; the picked one's settings hang from it: its function, from the methods the animated object's scripts have that an event can call (editor_event_methods, as the Animator finds receivers), and the parameter that method takes. Saved into the .anim's m_Events as Unity writes them (an object parameter kept as written), each change an undo step; the runtime calls them while playing.

Window layouts

Unity parity, phase 6: Window > Layouts has Unity's Default, Tall (the Scene view over the Game view) and 2 by 3 (those beside the Hierarchy, Project and Inspector in columns), the layouts the person saved (Save Layout under a name; a name in use is replaced), each loaded by clicking it, and Delete Layout; kept with the preferences, so they come back after a restart. Reset Layout goes back to Default.

UI in edit mode

Unity parity, phase 6: canvases draw while editing, in the Game view and the Scene view, as Unity's do: laid out for the game's screen and their graphics built when the scene or the screen changes (editor_ui; frames do it while playing).

Game view controls

Unity parity, phase 6: the Game view's aspect drop-down (Free Aspect, 16:9, 16:10, 4:3, Full HD, and resolutions added from it), the game's screen letterboxed to it (a resolution at its own size when it fits, else scaled down) with Screen.width and height, and so canvases, following it (the Scene view's render leaves the screen as the game has it), the pointer mapped into it; Maximize On Play, Mute Audio (the mixer's output, whatever scripts set) and Stats (frame time, screen, cameras, draw calls, objects), kept with the preferences.

Rect Transform

Unity parity, phase 6: a UI object's Transform section is its Rect Transform, as Unity's: the anchor presets (Unity's grid of sixteen; Shift sets the pivot, Alt the position), the position and size, or on a stretched axis its edges' distances from its anchors (Left, Right, Top, Bottom), the anchors and the pivot; every edit keeps the rect where it is in its parent (editor_parent_rect), as Unity's do. The runtime applies a RectTransform's anchored position after its other fields.

Play mode

Error Pause in the Console pauses play when an error's logged (or thrown); the toolbar's time scale beside Play, Pause and Step is the game's Time.timeScale (editor_time_scale), set from the first frame; and a component's Copy Component in the live Inspector takes its values as the game has them that moment, to paste onto the scene's with Paste Component Values after Stop.

Prefab variants, nesting and unpacking

Create Prefab Variant on a prefab (a prefab instancing its base, as Unity writes one), edited in prefab mode as overrides of the base; a prefab placed inside another shows as its own instance (the runtime gives each object the chain of prefabs it comes from); Unpack Prefab (its nested prefabs stay instances) and Unpack Prefab Completely. Copies linked to a prefab become instances before a prefab changes, so they follow it.

Every kind of prefab override

Components added to an instance (marked, applied to the prefab or removed), prefab components removed from one (shown struck through, restored as themselves or the removal applied), objects added under one (marked in the Hierarchy, applied); and on the instance root its prefab with Open and an Overrides summary listing them all by object, with Revert All and Apply All. Applying rebuilds the scene so every instance takes the change.

Prefab mode

A prefab opens on its own (double-click in the Project pane, or Open Prefab on an instance's row), the scene parked with its unsaved changes, a breadcrumb above the Scene view going back; going back saves the .prefab and rebuilds the scene so every instance takes the change (unsaved changes and unsaved prefab links carried through a copy in the project's Temp). Links to prefabs are kept per scene in the runtime. (The scene's undo history starts again when a prefab changed.)

From the Console to the code

A log names the object it's about (Debug.Log's context, or the behaviour a script exception came from) and its stack; clicking it selects the object (the live one while playing), its stack shows below in Unity's form with the script frames as links, and a link or a double-click opens the script at that line in VS Code (found on the PATH or where it installs; the system's opener otherwise). Scripts open from the Project pane (double-click) and the Inspector (Edit Script) too. Exceptions log as Unity's ("Type: message", the stack apart), and the MCP server's logs carry an error's stack.

Prefabs from the Hierarchy

An object dragged onto a Project folder becomes a .prefab (its children and components, in Unity's format, with its .meta), and the object an instance of it, saved into the scene as a PrefabInstance with what differs as overrides. Instance roots carry the prefab icon in the Hierarchy, with the prefab named on hover.

Project pane

Create (Folder, C# Script from Unity's template, Material, Scene with a camera and a light), rename in place (a script's class with it), drag onto a folder to move, Delete to the recycle bin; each with its .meta, so GUIDs and the references to them hold, the runtime told where assets went, and the open scene followed when it moves.

The Create menu as Unity's GameObject menu

Create Empty, Empty Child (Alt+Shift+N) and Empty Parent (Ctrl+Shift+G); 3D objects, Sprite, Particle System, Trail, Line, the four lights, Audio Source, Camera, and UI (Canvas with its EventSystem, Image, Text, Button), each with Unity's components, rotation, layer and built-in materials, font and sprite.

Unity's built-in materials, font and UI sprite named in asset pickers, with or without a project open; a renderer's material picked by name

Scene view gizmos

The selection outlined in amber (its meshes' silhouettes, children's too); colliders (box, sphere, capsule, character controller, 2D box and circle, mesh as its outline) in green; lights' range, cone or direction in amber; cameras' view; audio sources' ranges in blue.

The brand guide's editor

Top bar, panels, tabs, Hierarchy and Project trees, Inspector headers and fields, Console, Review, History, empty states, focus ring, light theme.

Hierarchy

Search, arrow keys, rename in place, drag to reorder or parent (the selection too), double-click to frame.

Inspector

Fields that fit the panel, enum drop-downs, component and Static checkboxes, Add Field in the header menu, play-mode editors.

Menus with shortcuts; History that jumps to an edit

The panels' layout and the recent scenes (File > Open Recent) kept between sessions, with the theme

Interface icons for the kinds of asset, drawn in house (`docs/branding/icons`), in the Project pane

Several selected objects edited together in the Inspector

The components they share, differing values shown as —, one undo step. (The name field still shows the active object's.)

Hierarchy objects and Project assets dragged onto the Inspector's reference and asset fields

Copy Component, Paste Component Values and Paste Component As New in a component header's menu

Snapping

Ctrl keeps a handle drag to steps (1 unit, 15°, 0.1 scale), set in the scene tools' Snap menu.

Components scripts add while playing get the play-mode Inspector's editors

Described between frames:

Large scenes

10,000 objects take about 2 ms a frame (the Hierarchy draws only the rows in view; the scene's snapshot is kept until it changes), held under 8 ms by tests/large_scene.rs in release builds.

Prefab overrides

A component field, or an object's tag, layer or Transform, that differs from its prefab is bold with a bar, and its menu (or the component's) applies it to the .prefab file, giving the scene's other instances the value, or reverts it.

Saves drop instances' overrides of applied values once they match the prefab

References, names, positions and rotations stay, as Unity keeps them:

Applying is an undo step

"Apply radius to Coin.prefab": undo and redo put the .prefab file back and forth, agents' undos included.