//void OnSceneUnloaded(Scene scene) //{ // ScenePromise promise = GetUnloadingScenePromise(scene.name); // if (promise == null) // return; // promise.scene = scene; // if (scene.isLoaded) // StartCoroutine(WaitForSceneUnload(scene, promise)); // else // Execute(promise); //} static IEnumerator WaitForSceneLoad(Scene scene, ScenePromise promise) { while (!scene.isLoaded) { yield return(null); } Execute(promise); }
static void Execute(ScenePromise promise) { if (promise.callback != null) { promise.callback(promise.scene); } loadingScenes.Remove(promise); }
static public void LoadAsync(string name, LoadSceneMode mode = LoadSceneMode.Single, UnityAction <Scene> callback = null, bool unique = true) { if (unique && Exists(name)) { return; } ScenePromise scenePromise = new ScenePromise(name, callback); loadingScenes.Add(scenePromise); SceneManager.LoadSceneAsync(name, mode); }
static public void LoadAsync(string name, LoadSceneMode mode = LoadSceneMode.Single, Action <Scene> callback = null, bool allowMultiple = true) { if (!allowMultiple && HandleUniqueLoad(name, callback)) { return; } CheckSubscription(); ScenePromise scenePromise = new ScenePromise(name, callback); loadingScenes.Add(scenePromise); SceneManager.LoadSceneAsync(name, mode); }
static public void Load(string name, LoadSceneMode mode = LoadSceneMode.Single, Action <Scene> callback = null, bool allowMultiple = true) { if (!allowMultiple && _HandleUniqueLoad(name, callback)) { return; } ListenIfNotListening(); ScenePromise scenePromise = new ScenePromise(name, callback); loadingScenes.Add(scenePromise); SceneManager.LoadScene(name, mode); }
static void OnSceneLoading(Scene scene, LoadSceneMode mode) { ScenePromise promise = GetLoadingScene(scene.name); if (promise == null) { return; } promise.scene = scene; if (!scene.isLoaded) { CoroutineLauncher.Instance.StartCoroutine(WaitForSceneLoad(scene, promise)); } else { Execute(promise); } }
static void OnSceneLoaded(Scene scene, LoadSceneMode mode) { TotalSceneLoadCount++; ScenePromise promise = GetLoadingScenePromise(scene.name); if (promise == null) { return; } promise.Scene = scene; if (!scene.isLoaded) { Instance.StartCoroutine(WaitForSceneLoad(scene, promise)); } else { Execute(promise); } }
public static ISceneLoadPromise Load(string sceneName, SceneLoadSettings loadSettings) { // add new promise ScenePromise scenePromise = new ScenePromise(sceneName); Instance._loadingScenePromises.Add(scenePromise); LoadSceneParameters loadParameters = new LoadSceneParameters() { loadSceneMode = loadSettings.LoadSceneMode, localPhysicsMode = loadSettings.LocalPhysicsMode }; try { switch (loadSettings.LoadSceneMode) { case LoadSceneMode.Single: SceneManager.LoadScene(sceneName, loadParameters); break; case LoadSceneMode.Additive: SceneManager.LoadSceneAsync(sceneName, loadParameters); break; default: throw new NotSupportedException(); } } catch (Exception e) { Debug.LogError(e.Message); } return(scenePromise); }
//IEnumerator WaitForSceneUnload(Scene scene, ScenePromise promise) //{ // while (scene.isLoaded) // yield return null; // Execute(promise); //} static void Execute(ScenePromise promise) { promise.Complete(); Instance._loadingScenePromises.Remove(promise); }
static void Execute(ScenePromise promise) { promise.InvokeCallback(); loadingScenes.Remove(promise); }