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.