Quick answer: Unity LoadSceneAsync progress stuck at 0.9 reporting forever? With allowSceneActivation = false, progress caps at 0.9 deliberately — the last 10% is activation, which you must trigger.

A loading screen waits for progress = 1 to swap scenes. It never gets there because allowSceneActivation is false.

Activation Gate

var op = SceneManager.LoadSceneAsync(name);
op.allowSceneActivation = false;
while (op.progress < 0.9f) yield return null;
// Show 100% to user, optional fade-in
op.allowSceneActivation = true;

The 0.9 cap is intentional — lets your UI show 100% before the (potentially long) Activate step runs.

Progress 0..0.9 Maps to 0..1

Display progress / 0.9f so the user sees a smooth bar to 100% instead of stalling at 90%.

Activation Stalls

The Activate step can be expensive (instantiation, GameObject Awake calls). If your UI shows 100% then freezes, that’s during Activate — profile to find the cause.

Additive Load

For additive scene loads, op.allowSceneActivation = true from the start is usually fine — the new scene appears as it finishes. No staging needed.

Verifying

Loading bar reaches 100% smoothly. Setting allowSceneActivation = true after 90% completes the swap cleanly.

“0.9 is the activation gate. Set allowSceneActivation = true to finish loading.”

Map progress 0..0.9 onto 0..1 for display — players never see 90% ‘hung’, they see a clean fill to 100%.