public static UniTask LoadSceneAsync( string sceneName, LoadSceneMode mode = LoadSceneMode.Single, Action <AsyncOperation> onStarted = null, Action onCompleted = null, bool allowSceneActivation = true, AsyncOperationProgress onProgress = null) { if (!string.IsNullOrEmpty(sceneName) && !SceneManagementSingleton.IsSceneLoadedOrInBackground(sceneName)) { AsyncOperation ao = SceneManager.LoadSceneAsync(sceneName, mode); ao.allowSceneActivation = allowSceneActivation; onStarted?.Invoke(ao); if (onCompleted != null) { ao.completed += (ctx) => onCompleted.Invoke(); } return(ao.ConfigureAwait(Progress.Create <float>(x => onProgress?.Invoke(x)))); } else { onCompleted?.Invoke(); return(UniTask.CompletedTask); } }
public static UniTask LoadSceneAsync( int buildIndex, bool setActiveAsMainScene = false, Action <AsyncOperation> onStarted = null, Action onCompleted = null, bool allowSceneActivation = true, AsyncOperationProgress onProgress = null, LoadSceneMode mode = LoadSceneMode.Additive) { if (setActiveAsMainScene) { return(LoadSceneAsync(buildIndex, mode, onStarted, () => { if (setActiveAsMainScene) { SceneManagementSingleton.SetActiveScene(buildIndex); } onCompleted?.Invoke(); }, allowSceneActivation, onProgress)); } else { return(LoadSceneAsync(buildIndex, mode, onStarted, () => onCompleted?.Invoke(), allowSceneActivation, onProgress)); } }
public static Task <SceneInstance> LoadSceneAsync( string sceneName, LoadSceneMode mode = LoadSceneMode.Single, bool activateOnLoad = true) { if (!SceneManagementSingleton.IsSceneLoadedOrInBackground(sceneName)) { var ao = Addressables.LoadSceneAsync(sceneName, mode, activateOnLoad); return(ao.Task); } else { return(Task.FromResult <SceneInstance>(default));
public async UniTask UnloadSceneAsync( int buildIdx, Action onCompleted = null) { if (buildIdx == -1) { return; } if (SceneManagementSingleton.IsSceneInBackground(buildIdx)) { return; } _loadedScenes.Remove(buildIdx); await UniRxAsyncSceneManagementSingleton.UnloadSceneAsync(buildIdx, onCompleted); }
public static UniTask UnloadSceneAsync( string sceneName, Action <AsyncOperation> onCompleted = null, UnloadSceneOptions options = UnloadSceneOptions.None, AsyncOperationProgress onProgress = null) { if (!string.IsNullOrEmpty(sceneName) && SceneManagementSingleton.IsSceneLoadedOrInBackground(sceneName)) { AsyncOperation ao = SceneManager.UnloadSceneAsync(sceneName, options); if (onCompleted != null) { ao.completed += onCompleted; } return(ao.ConfigureAwait(Progress.Create <float>(x => onProgress?.Invoke(x)))); } else { onCompleted?.Invoke(null); return(UniTask.CompletedTask); } }