-
-
Save AliAkbarMontazeri/3d93013d71770378c5f66d4ae76f70ee to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// LoadingScreenManager | |
// -------------------------------- | |
// built by Martin Nerurkar (http://www.martin.nerurkar.de) | |
// for Nowhere Prophet (http://www.noprophet.com) | |
// | |
// Licensed under GNU General Public License v3.0 | |
// http://www.gnu.org/licenses/gpl-3.0.txt | |
using UnityEngine; | |
using UnityEngine.UI; | |
using System.Collections; | |
using UnityEngine.SceneManagement; | |
public class LoadingScreenManager : MonoBehaviour { | |
[Header("Loading Visuals")] | |
public Image loadingIcon; | |
public Image loadingDoneIcon; | |
public Text loadingText; | |
public Image progressBar; | |
public Image fadeOverlay; | |
[Header("Timing Settings")] | |
public float waitOnLoadEnd = 0.25f; | |
public float fadeDuration = 0.25f; | |
[Header("Loading Settings")] | |
public LoadSceneMode loadSceneMode = LoadSceneMode.Single; | |
public ThreadPriority loadThreadPriority; | |
[Header("Other")] | |
// If loading additive, link to the cameras audio listener, to avoid multiple active audio listeners | |
public AudioListener audioListener; | |
AsyncOperation operation; | |
Scene currentScene; | |
public static int sceneToLoad = -1; | |
// IMPORTANT! This is the build index of your loading scene. You need to change this to match your actual scene index | |
static int loadingSceneIndex = 2; | |
public static void LoadScene(int levelNum) { | |
Application.backgroundLoadingPriority = ThreadPriority.High; | |
sceneToLoad = levelNum; | |
SceneManager.LoadScene(loadingSceneIndex); | |
} | |
void Start() { | |
if (sceneToLoad < 0) | |
return; | |
fadeOverlay.gameObject.SetActive(true); // Making sure it's on so that we can crossfade Alpha | |
currentScene = SceneManager.GetActiveScene(); | |
StartCoroutine(LoadAsync(sceneToLoad)); | |
} | |
private IEnumerator LoadAsync(int levelNum) { | |
ShowLoadingVisuals(); | |
yield return null; | |
FadeIn(); | |
StartOperation(levelNum); | |
float lastProgress = 0f; | |
// operation does not auto-activate scene, so it's stuck at 0.9 | |
while (DoneLoading() == false) { | |
yield return null; | |
if (Mathf.Approximately(operation.progress, lastProgress) == false) { | |
progressBar.fillAmount = operation.progress; | |
lastProgress = operation.progress; | |
} | |
} | |
if (loadSceneMode == LoadSceneMode.Additive) | |
audioListener.enabled = false; | |
ShowCompletionVisuals(); | |
yield return new WaitForSeconds(waitOnLoadEnd); | |
FadeOut(); | |
yield return new WaitForSeconds(fadeDuration); | |
if (loadSceneMode == LoadSceneMode.Additive) | |
SceneManager.UnloadScene(currentScene.name); | |
else | |
operation.allowSceneActivation = true; | |
} | |
private void StartOperation(int levelNum) { | |
Application.backgroundLoadingPriority = loadThreadPriority; | |
operation = SceneManager.LoadSceneAsync(levelNum, loadSceneMode); | |
if (loadSceneMode == LoadSceneMode.Single) | |
operation.allowSceneActivation = false; | |
} | |
private bool DoneLoading() { | |
return (loadSceneMode == LoadSceneMode.Additive && operation.isDone) || (loadSceneMode == LoadSceneMode.Single && operation.progress >= 0.9f); | |
} | |
void FadeIn() { | |
fadeOverlay.CrossFadeAlpha(0, fadeDuration, true); | |
} | |
void FadeOut() { | |
fadeOverlay.CrossFadeAlpha(1, fadeDuration, true); | |
} | |
void ShowLoadingVisuals() { | |
loadingIcon.gameObject.SetActive(true); | |
loadingDoneIcon.gameObject.SetActive(false); | |
progressBar.fillAmount = 0f; | |
loadingText.text = "LOADING..."; | |
} | |
void ShowCompletionVisuals() { | |
loadingIcon.gameObject.SetActive(false); | |
loadingDoneIcon.gameObject.SetActive(true); | |
progressBar.fillAmount = 1f; | |
loadingText.text = "LOADING DONE"; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment