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);