using System; using System.Collections; using UnityEngine; using UnityEngine.SceneManagement; namespace SimpleTools.SceneManagement { public static class Loader { class LoadingMonoBehaviour : MonoBehaviour { } static Action onLoaderCallback; static AsyncOperation loadingAsyncOperation; /// Load a scene with a loading scene /// It requires a scene called "Loading" where the loading screen is located. /// public static void Load(int scene) { onLoaderCallback = () => { GameObject loadingGameObject = new GameObject("LoadingGameObject"); loadingGameObject.AddComponent().StartCoroutine(LoadSceneAsync(scene)); }; SceneManager.LoadScene("Loading"); } /// Load a scene with a loading scene /// It requires a scene called "Loading" where the loading screen is located. /// public static void Load(string scene) { onLoaderCallback = () => { GameObject loadingGameObject = new GameObject("LoadingGameObject"); loadingGameObject.AddComponent().StartCoroutine(LoadSceneAsync(scene)); }; SceneManager.LoadScene("Loading"); } static IEnumerator LoadSceneAsync(int scene) { yield return null; loadingAsyncOperation = SceneManager.LoadSceneAsync(scene); while (!loadingAsyncOperation.isDone) { yield return null; } } static IEnumerator LoadSceneAsync(string scene) { yield return null; loadingAsyncOperation = SceneManager.LoadSceneAsync(scene); while (!loadingAsyncOperation.isDone) { yield return null; } } /// Returns the loading progress /// public static float GetLoadingProgress() { if (loadingAsyncOperation != null) { return loadingAsyncOperation.progress; } else { return 0f; } } public static void LoaderCallback() { if (onLoaderCallback != null) { onLoaderCallback(); onLoaderCallback = null; } } } }