Pular para o conteúdo principal
Versão: 5.0.x

My Scene Manager

O MySceneManager é um wrapper estático da classe CoreSceneManager, e existe para simplificar o uso das Operações de Cena. Ele mantém uma referência interna a um Core Scene Manager, criado durante o callback RuntimeInitializeOnLoadMethod, que é executado depois que a primeira cena foi carregada e depois do primeiro ciclo de Awake(). Isso significa que o MySceneManager só estará inicializado a partir do primeiro ciclo de Start().

[RuntimeInitializeOnLoadMethod]
internal static void Initialize()
{
_instance = new CoreSceneManager(true);
}

API Estática​

Se quiser, você pode desabilitar a classe estática MySceneManager por completo, caso prefira controlar manualmente o ciclo de vida do CoreSceneManager e/ou estender alguma funcionalidade. Para isso, basta definir o scripting symbol DISABLE_STATIC_SCENE_MANAGER nas configurações de compilação do seu projeto.

Os quatro métodos​

Ele não expõe a instância interna de CoreSceneManager, então espelha as mesmas quatro operações de forma estática:

MySceneManager.LoadAsync(sceneParameters);
MySceneManager.UnloadAsync(sceneParameters);
MySceneManager.TransitionAsync(sceneParameters, loadingScreen);
MySceneManager.ReloadActiveSceneAsync(loadingScreen);

Uma assinatura por operação cobre qualquer tipo de referência, porque tanto SceneParameters quanto LoadingScreen convertem implicitamente:

MySceneManager.LoadAsync("my-scene"); // string
MySceneManager.LoadAsync(1); // índice de build
MySceneManager.LoadAsync(new[] { "scene-a", "scene-b" }); // várias
MySceneManager.TransitionAsync("target", "loading"); // com uma tela de carregamento

Eventos​

O MySceneManager repassa os mesmos eventos da API de instância:

Evento
SceneLoaded / SceneUnloadedUma vez por cena
ActiveSceneChangedA cena ativa anterior e a atual
OperationStartedToda operação que este gerenciador inicia, antes de ela rodar

OperationStarted é o ponto de encaixe para instrumentação global — ele te entrega o SceneOperation antes da primeira mudança de estado, o único momento a partir do qual dá para observar o ciclo de vida inteiro:

MySceneManager.OperationStarted += op =>
{
op.StateChanged += o => Analytics.Track(o.Kind, o.State);
};