1

I am trying to unload a previously added scene and then additively load another scene, in that sequence. I use the following code below to do this. This code works correctly in the editor and on all platforms except WebGL. I know that WebGL won't work with asynchronous code, but this uses a coroutine, which should be executed on the main thread. So, why would this not work in WebGL?

        private IEnumerator UnloadAndLoadNextScene(IslandKey island)
        {
            // Avoid loading the same island twice.
            if (island.ScenePath == previousIslandScenePath)
                yield break;

            string islandScenePath = island.ScenePath;
            previousIslandScenePath = islandScenePath;

            // Don't unload and load until previous unload and load is complete.
            while (processingUnloadAndLoad)
                yield return null;

            // Immediately set processing unload and load to true to
            // lock this method to only one instance at a time.
            processingUnloadAndLoad = true;

            // Unload previous scene.
            if (unloadSceneHandle.IsValid())
            {
                AsyncOperationHandle unloadingScene = Addressables.UnloadSceneAsync(unloadSceneHandle);
                yield return unloadingScene;
            }

            // Load scene.
            AsyncOperationHandle<SceneInstance> loadingScene = Addressables.LoadSceneAsync(islandScenePath, LoadSceneMode.Additive);

            yield return loadingScene;

            if (loadingScene.Status == AsyncOperationStatus.Succeeded)
                unloadSceneHandle = loadingScene;

            ...

            // Unload and load is now complete, so unlock method.
            processingUnloadAndLoad = false;
        }
    }

0 Answers0