- 
      
 - 
        
Save Democide/beba5fd2603b268a8f72 to your computer and use it in GitHub Desktop.  
| // 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"; | |
| } | |
| } | 
Going to try, thanks
Thanks 👍
Brilliant thank you, just what I needed. Will credit you in my University project.
Keep going with such tutorials man! They're really helpful :)
Thanks man.
I recommend changing the line 40 for this
static string loadingSceneIndex = "NameOfLoadinScene";
because it not change if you change scene number, useful to many scene projects
ThankYou!
have u got a downloadable script for the 2nd one as well
I used this but it gets stuck on loading screen and won't fade in. Any suggestions?
thanks
Unity recommends using UnloadSceneAsync now. Use that instead of UnloadScene
I tried adding .gif and converted it to a sprite.  Then assigned it to the LoadingIcon but the animation of the gif doesn't seem to animate it when rendering the game!  Any ideas?
Thanks!!!