Quick answer: Unity SceneManager.LoadSceneAsync stuck at 0.9 progress? That's by design when allowSceneActivation is false - wait for 0.9 then set the flag true to complete the load.

Loading bar stops at 90% and never finishes. The async operation reports 0.9 forever.

Activate explicitly

var op = SceneManager.LoadSceneAsync(name);
op.allowSceneActivation = false;
while (op.progress < 0.9f) yield return null;
op.allowSceneActivation = true;

The 0.9 cap is intentional: it lets you defer the actual activation (which freezes the frame) until your loading screen finishes.

Normalize progress for the bar

Display Mathf.Clamp01(op.progress / 0.9f) so the loading bar fills to 100% before activation.

Pre-warm shader variants

Between 0.9 and activation, run a shader warm-up pass. Eliminates the first-frame hitch when the scene activates.

“0.9 is 'ready to activate' - not 'stuck'.”

Use a coroutine-based scene loader from day one. Direct LoadScene calls are deceptively simple and produce frame hitches that look like bugs to players.