Example #1
0
    /// <summary>
    /// Unloads an additive scene.
    ///
    /// Additive scene can be either [Scenes.CONSTRUCT] or [Scenes.HUD].
    /// </summary>
    /// <param name="beforeSceneUnload">Handler executed before scene is unloaded. If null, default handler is executed.</param>
    /// <param name="onSceneUnload">Handler executed after scene is unloaded. If null, default handler is executed.</param>
    IEnumerator UnloadScene(Scenes newScene, BeforeSceneUnloadDelegate beforeSceneUnload, OnSceneUnloadDelegate onSceneUnload, BeforeSceneLoadDelegate beforeSceneLoad, OnSceneLoadDelegate onSceneLoad)
    {
        if (currentScene == Scenes.NONE)
        {
            // Load new scene, as no scene is currently loaded
            StartCoroutine(LoadScene(newScene, beforeSceneLoad, onSceneLoad));
            yield break;
        }

        //String sceneName = SceneNameForScene(currentScene);
        int sceneName = SceneNameForScene(currentScene);

        //if (sceneName != "") {
        if (sceneName != -1)
        {
            if (beforeSceneUnload != null)
            {
                beforeSceneUnload();
            }
            else
            {
                DefaultBeforeSceneUnload();
            }

            AsyncOperation asyncOperation = SceneManager.UnloadSceneAsync(sceneName, UnloadSceneOptions.UnloadAllEmbeddedSceneObjects);
            if (asyncOperation != null)
            {
                asyncOperation.completed += delegate(AsyncOperation op) {
                    currentScene = Scenes.NONE;

                    if (onSceneUnload != null)
                    {
                        onSceneUnload();
                    }
                    else
                    {
                        DefaultOnSceneUnload();
                    }

                    // Load new scene, after current scene has been unloaded
                    StartCoroutine(LoadScene(newScene, beforeSceneLoad, onSceneLoad));
                };
            }
        }
    }
Example #2
0
 /// <summary>
 /// Performs a scene change. First Unloads a scene, then Load the next Scene
 /// </summary>
 /// <param name="newScene">the new scene that shall be loaded</param>
 /// <param name="beforeSceneUnload">delegate that is executed before the current scene is unloaded</param>
 /// <param name="onSceneUnload">delegate that ist executed after the current scene is unloaded</param>
 /// <param name="beforeSceneLoad">delegate that is executed before the new scene is loaded</param>
 /// <param name="onSceneLoad">delegate that is executed after the new scene is loaded</param>
 public void ChangeScene(Scenes newScene, BeforeSceneUnloadDelegate beforeSceneUnload, OnSceneUnloadDelegate onSceneUnload, BeforeSceneLoadDelegate beforeSceneLoad, OnSceneLoadDelegate onSceneLoad)
 {
     StartCoroutine(UnloadScene(newScene, beforeSceneUnload, onSceneUnload, beforeSceneLoad, onSceneLoad));
 }