Quick answer: The “Hold on” dialog names the step Unity is blocked on: entering Play mode, reloading script assemblies, compiling or importing. A timer that keeps climbing usually means an infinite loop in your code (in Awake, OnEnable, OnValidate or an editor script). Slow but finite waits are domain reload and import cost: use Enter Play Mode settings, assembly definitions and antivirus exclusions.

Every Unity developer has stared at the “Hold on” progress bar. Sometimes it is the editor doing honest work, sometimes it is your code stuck in a loop that will never end. The text in the dialog and the editor log tell you which.

Step 1: read what it is busy with

The dialog title or detail line names the operation, for example Application.EnterPlayMode, Reload Script Assemblies, Compiling Scripts, Importing Assets or Domain Unloading. Then open the editor log and look at the last lines written:

Busy forever: your code is in a loop

If the timer passes a few minutes during EnterPlayMode or after a script change, assume an infinite loop or a deadlock in code that runs at that moment:

To find it, attach your IDE debugger (Rider or Visual Studio) to the Unity editor process and press Pause. The main thread's call stack shows the exact line. Killing the editor loses unsaved scene changes, so attaching is worth the minute it takes.

Busy for a while: domain reload is slow

Entering Play mode reloads the scripting domain by default, which reinitializes every static and reruns every [InitializeOnLoad]. In large projects that takes many seconds every time.

Busy importing assets

Busy compiling Burst or shaders

With Jobs > Burst > Synchronous Compilation enabled, entering Play mode waits for Burst to compile every job. Leave it off during iteration. Large shader graphs compile variants on first use; the log shows shader compilation lines while that happens.

Hangs players hit

The same code that hangs the editor in Awake hangs a player's build on a loading screen, where nobody can attach a debugger. Bugnet's Unity SDK tracks sessions per build and files exceptions with the last log lines, so a loading screen that never finishes for some players shows up as sessions that start and never progress, with the errors leading up to it.

Frequently asked questions

Why is Unity stuck on “Hold on” when I press Play?

Usually an infinite loop in Awake, OnEnable, Start or OnValidate of something in the scene, or a slow domain reload. If the timer keeps climbing past a few minutes, attach a debugger and pause to find the loop.

How do I make entering Play mode faster in Unity?

In Project Settings, Editor, Enter Play Mode Settings, disable domain reload, then reset static fields yourself with RuntimeInitializeOnLoadMethod. Assembly definitions also reduce recompile time.

Where is the Unity Editor log?

On Windows in %LOCALAPPDATA%\Unity\Editor\Editor.log, on macOS in ~/Library/Logs/Unity/Editor.log, and on Linux in ~/.config/unity3d/Editor.log.

A timer that keeps climbing is your code, not Unity. Attach a debugger and press pause.