Uma linha no lugar de cinco
Faça transições de cena assim:
MySceneManager.TransitionAsync("my-target-scene", "my-loading-scene");
Ao invés de:
yield return SceneManager.LoadSceneAsync("my-loading-scene", LoadSceneMode.Additive);
yield return SceneManager.LoadSceneAsync("my-target-scene", LoadSceneMode.Additive);
SceneManager.SetActiveScene(SceneManager.GetSceneByName("my-target-scene"));
SceneManager.UnloadSceneAsync("my-loading-scene");
SceneManager.UnloadSceneAsync("my-previous-scene");
Essa mesma linha funciona tanto para cenas nas Build Settings quanto no Addressables.
Em um projeto real
O 3D Game Kit da Unity vem com seu próprio carregador de cenas por corrotina: fade out, carregar em modo single, teleportar o jogador, fade in.
Substituí-lo levou uma única chamada de TransitionAsync. A tela de carregamento virou uma cena, a configuração pós-carregamento passou para os eventos da operação, e o HUD do exemplo continuou carregado por todas as transições sem DontDestroyOnLoad.
Leia o estudo de casoToda chamada devolve um handle
Não é um callback registrado antes da chamada — é um objeto que você tem depois dela.
SceneOperation op = MySceneManager.TransitionAsync("my-target-scene", "my-loading-scene");
op.Progressed += progress => bar.value = progress;
op.StateChanged += o => { if (o.State == SceneOperationState.ScreenIn) BeginIntro(); };
SceneResult result = await op; // or op.Cancel(), or yield return op.ToCoroutine()
Progresso
Um único número para a operação inteira, em vez de um AsyncOperation por cena para você mesmo somar.
Estados
Resolving, ScreenIn, Unloading, Loading, Activating, ScreenOut, Completed — cada um informado no momento em que acontece.
Cancelamento
Chame Cancel no handle. Sem token para propagar pelos seus pontos de chamada de antemão.
Quatro métodos, não sessenta e quatro
Carregar, descarregar, fazer transição e obter. A versão 5 reduziu toda a API a eles.
Uma string, qualquer origem
A mesma chamada encontra a cena nas Build Settings ou no Addressables. Sem uma segunda API para aprender.
Aguarde do seu jeito
Use await diretamente, converta para Task ou use yield return em uma corrotina. É sempre a mesma operação.
Um handle para cada operação
Progresso, estado do ciclo de vida, eventos por cena e cancelamento — disponíveis depois da chamada, não registrados antes dela.
Telas de carregamento além de cenas
Use uma cena, um prefab ou um documento de UI Toolkit, com um componente pronto para cada caso.
Acompanhe o que acontece
Uma camada de log relata cada etapa, então uma transição travada é diagnosticável em vez de misteriosa.
O que você escreveria no lugar
| My Scene Manager | Unity Scene Manager | |
|---|---|---|
| Carregamento de Cena Async | ||
| Descarregamento de Cena Async | ||
| Transição de Cena Async | ||
| Recarregamento de Cena Async | ||
| Múltiplas Cenas por Chamada | ||
| Estados do Ciclo de Vida | ||
| Cancelamento | ||
| Suporte a Async/Await | ||
| Tela de Carregamento Integrada | ||
| Integração com Addressables |