Play Mode

Play Mode runs your game's simulation against the current scene inside the Scene View, so you can iterate without doing a full build-and-run. Press Play and your scripts start updating live; press Stop and the scene snaps back exactly as it was.


The toolbar

The play controls sit in the centre of the main menu bar, alongside a live FPS readout while running:

Control Effect
Play Enter Play mode and run the current scene
Play First Scene Run the project's configured first scene (Project Settings → first scene), regardless of which scene is open. The editor scene is restored on Stop.
Pause Freeze the simulation (the scene stays on screen)
Resume Continue a paused simulation
Step While paused, advance exactly one update frame
Stop End the simulation and restore the edit-time scene

Ctrl+P toggles Play ⇄ Stop.

While playing, the viewport draws a coloured border — orange when playing, blue when paused.

What runs

Your component scripts run their normal lifecycle and update exactly as they would in a shipped game: awakeenablestart on Play, update every frame, disabledestroy on Stop. The same engine.Frame context (time, input, transform, objects, services) is injected, so a component behaves identically in Play and in a build.

Input

Keyboard and mouse go to the game while playing. Every Input Actions asset in your project is applied at Play start, so action-based scripts (like the example FreeflyCamera — hold the right mouse button to look, WASD to move) work straight away.

State is never polluted

Play mode runs on its own copy of the scene. Anything the simulation does — moving objects, spawning, mutating fields — happens to that copy, never to the scene you're editing. Stop restores the pre-play state exactly, so you can play, experiment, and stop without ever saving accidental changes.

How it works (under the hood)

Because your scripts are compiled .zig files, Play compiles them — with the engine — into a small play library that the editor loads and steps in process, rendering the live scene into the viewport. The library is rebuilt only when you change a script, so repeated Play presses are instant. The first Play after a script edit pays a quick compile.

For the full design and the in-process-vs-subprocess trade-offs, see the docs/plans/play-mode.md design note in the engine repository.


← All docs Edit this page