using UnityEngine; using UnityEngine.SceneManagement; using System.Collections; using UnityEngine.UI; /// /// A global helper to seamlessly load levels using a dedicated Loading Scene. /// public class LevelLoader : MonoBehaviour { // The static variable that remembers where we want to go! public static string targetSceneName = ""; [Header("Loading UI")] [Tooltip("The UI Slider used as a visual loading progress bar.")] public Slider loadingProgressBar; private void Start() { // If this script wakes up and there's a target scene defined, it means // we are currently sitting in the LoadingScene and should start the heavy lifting! if (!string.IsNullOrEmpty(targetSceneName)) { StartCoroutine(LoadSceneAsynchronously(targetSceneName)); } } /// /// Call this from anywhere in your game to trigger the loading screen and go to a new level! /// Example: LevelLoader.LoadLevel("HouseInterior"); /// public static void LoadLevel(string sceneName) { targetSceneName = sceneName; // Asynchronously load the Loading Scene to prevent the Main Menu from freezing! SceneManager.LoadSceneAsync("LoadingScene"); } private IEnumerator LoadSceneAsynchronously(string sceneName) { // Start loading the heavy scene in the background AsyncOperation operation = SceneManager.LoadSceneAsync(sceneName); // Update the loading bar while the scene is loading while (!operation.isDone) { float progress = Mathf.Clamp01(operation.progress / 0.9f); if (loadingProgressBar != null) { loadingProgressBar.value = progress; } yield return null; } } }