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%.