Pular para o conteúdo principal
Versão: 3.1.0

Soluções de Problemas

Erro ao criar um AdvancedSceneManager

Ao criar um AdvancedSceneManager passando um parâmetro com valor true para seu construtor, como new AdvancedSceneManager(true), ele tenta adicionar todas as cenas carregadas à sua lista interna de cenas. Mas, se você criar durante o Awake(), você pode ver o erro:

ArgumentException: Attempted to get an {nameof(ISceneData)} through an invalid or unloaded scene.

Esse erro é gerado porque durante o Awake() a cena ainda não carregou totalmente e não pode ser adicionada à lista interna de cenas.

Mova a sua chamada para o Start().

Não consigo descarregar uma cena com um ILoadSceneInfo diferente

Caso você tenha carregado uma cena por um tipo de ILoadSceneInfo, você só consegue descarregá-la usando o mesmo tipo ou explicitamente um LoadSceneInfoScene. Por exemplo:

ILoadSceneInfo nameInfo = new LoadSceneInfoName("MyScene");
ILoadSceneInfo indexInfo = new LoadSceneInfoIndex(3);

sceneManager.LoadSceneAsync(nameInfo);

// Você **não pode** fazer isso:
sceneManager.UnloadSceneAsync(indexInfo);

// Mas pode fazer isso:
sceneManager.UnoadSceneAsync(nameInfo);

// Ou, faça um `LoadSceneInfoScene`.
// Alternativas: GetLoadedSceneByName(name), GetLoadedSceneAt(index), GetLastLoadedScene() ou GetActiveScene()
ILoadSceneInfo sceneInfo = sceneManager.GetLoadedSceneByName("MyScene");
sceneManager.UnloadSceneAsync(sceneInfo);

As vezes esse problema pode ser contornado ao realizar uma Transição de Cenas. Se você estiver tentando descarregar a cena ativa para fazer uma transição entre cenas, você pode executar a transição pelo Scene Manager e deixar que ele cuide da complexidade interna. Por exemplo:

// Ao invés de descarregar a cena de origem diretamente:
sceneManager.LoadSceneAsync(targetSceneInfo)
sceneManager.UnloadSceneAsync(sourceSceneInfo);

// Faça uma transição de cenas:
sceneManager.TransitionToScene(targetSceneInfo);