public LoadSceneWaitHandle(string sceneName, LoadSceneMode mode, LoadSceneBehaviour behaviour) { _sceneName = sceneName; _mode = mode; _behaviour = behaviour; _op = null; _scene = default(Scene); _initialized = false; }
public void WaitToActivate() { if (_behaviour >= LoadSceneBehaviour.Async) { _behaviour = LoadSceneBehaviour.AsyncAndWait; if (_op != null && !_op.isDone) { _op.allowSceneActivation = false; } } }
public LoadSceneWaitHandle LoadScene(int sceneBuildIndex, LoadSceneMode mode = LoadSceneMode.Single, LoadSceneBehaviour behaviour = LoadSceneBehaviour.Async) { if (sceneBuildIndex < 0 || sceneBuildIndex >= SceneManager.sceneCountInBuildSettings) { throw new System.IndexOutOfRangeException("sceneBuildIndex"); } string sceneName = "#" + sceneBuildIndex.ToString(); switch (behaviour) { case LoadSceneBehaviour.Standard: { var handle = new LoadSceneWaitHandle(sceneName, mode, behaviour); this.OnBeforeSceneLoaded(handle); SceneManager.LoadScene(sceneBuildIndex, mode); handle.Init(SceneManager.GetSceneAt(SceneManager.sceneCount - 1), null); return(handle); } case LoadSceneBehaviour.Async: { var handle = new LoadSceneWaitHandle(sceneName, mode, behaviour); this.OnBeforeSceneLoaded(handle); var op = SceneManager.LoadSceneAsync(sceneBuildIndex, mode); handle.Init(SceneManager.GetSceneAt(SceneManager.sceneCount - 1), op); return(handle); } case LoadSceneBehaviour.AsyncAndWait: { var handle = new LoadSceneWaitHandle(sceneName, mode, behaviour); this.OnBeforeSceneLoaded(handle); var op = SceneManager.LoadSceneAsync(sceneBuildIndex, mode); op.allowSceneActivation = false; handle.Init(SceneManager.GetSceneAt(SceneManager.sceneCount - 1), op); return(handle); } } throw new System.InvalidOperationException("Unsupported LoadSceneBehaviour."); }
public LoadSceneWaitHandle LoadScene(string sceneName, LoadSceneMode mode = LoadSceneMode.Single, LoadSceneBehaviour behaviour = LoadSceneBehaviour.Async) { switch (behaviour) { case LoadSceneBehaviour.Standard: { var handle = new LoadSceneWaitHandle(sceneName, mode, behaviour); this.OnBeforeSceneLoaded(handle); SceneManager.LoadScene(sceneName, mode); handle.Init(SceneManager.GetSceneAt(SceneManager.sceneCount - 1), null); return(handle); } case LoadSceneBehaviour.Async: { var handle = new LoadSceneWaitHandle(sceneName, mode, behaviour); this.OnBeforeSceneLoaded(handle); var op = SceneManager.LoadSceneAsync(sceneName, mode); handle.Init(SceneManager.GetSceneAt(SceneManager.sceneCount - 1), op); return(handle); } case LoadSceneBehaviour.AsyncAndWait: { var handle = new LoadSceneWaitHandle(sceneName, mode, behaviour); this.OnBeforeSceneLoaded(handle); var op = SceneManager.LoadSceneAsync(sceneName, mode); op.allowSceneActivation = false; handle.Init(SceneManager.GetSceneAt(SceneManager.sceneCount - 1), op); return(handle); } } throw new System.InvalidOperationException("Unsupported LoadSceneBehaviour."); }
public static LoadSceneWaitHandle LoadScene(string sceneName, LoadSceneMode mode, LoadSceneBehaviour behaviour) { var manager = Services.Get <ISceneManager>(); if (manager != null) { return(manager.LoadScene(sceneName, mode, behaviour)); } switch (behaviour) { case LoadSceneBehaviour.Standard: { var handle = new LoadSceneWaitHandle(sceneName, mode, behaviour); SceneManager.LoadScene(sceneName, mode); handle.Init(SceneManager.GetSceneAt(SceneManager.sceneCount - 1), null); return(handle); } case LoadSceneBehaviour.Async: { var handle = new LoadSceneWaitHandle(sceneName, mode, behaviour); var op = SceneManager.LoadSceneAsync(sceneName, mode); handle.Init(SceneManager.GetSceneAt(SceneManager.sceneCount - 1), op); return(handle); } case LoadSceneBehaviour.AsyncAndWait: { var handle = new LoadSceneWaitHandle(sceneName, mode, behaviour); var op = SceneManager.LoadSceneAsync(sceneName, mode); op.allowSceneActivation = false; handle.Init(SceneManager.GetSceneAt(SceneManager.sceneCount - 1), op); return(handle); } } throw new System.InvalidOperationException("Unsupported LoadSceneBehaviour."); }
public static LoadSceneWaitHandle LoadScene(int sceneBuildIndex, LoadSceneMode mode, LoadSceneBehaviour behaviour) { if (sceneBuildIndex < 0 || sceneBuildIndex >= SceneManager.sceneCountInBuildSettings) { throw new System.IndexOutOfRangeException("sceneBuildIndex"); } var manager = Services.Get <ISceneManager>(); if (manager != null) { return(manager.LoadScene(sceneBuildIndex, mode, behaviour)); } //string sceneName = "#" + sceneBuildIndex.ToString(); string sceneName = SceneUtility.GetScenePathByBuildIndex(sceneBuildIndex); switch (behaviour) { case LoadSceneBehaviour.Standard: { var handle = new LoadSceneWaitHandle(sceneName, mode, behaviour); SceneManager.LoadScene(sceneBuildIndex, mode); handle.Init(SceneManager.GetSceneAt(SceneManager.sceneCount - 1), null); return(handle); } case LoadSceneBehaviour.Async: { var handle = new LoadSceneWaitHandle(sceneName, mode, behaviour); var op = SceneManager.LoadSceneAsync(sceneBuildIndex, mode); handle.Init(SceneManager.GetSceneAt(SceneManager.sceneCount - 1), op); return(handle); } case LoadSceneBehaviour.AsyncAndWait: { var handle = new LoadSceneWaitHandle(sceneName, mode, behaviour); var op = SceneManager.LoadSceneAsync(sceneBuildIndex, mode); op.allowSceneActivation = false; handle.Init(SceneManager.GetSceneAt(SceneManager.sceneCount - 1), op); return(handle); } } throw new System.InvalidOperationException("Unsupported LoadSceneBehaviour."); }