using System; using System.Collections; using UnityEngine; using UnityEngine.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; } } }