using UnityEngine; using System.Collections; using UnityEngine.SceneManagement; using UnityEngine.UI; public class Fader : MonoBehaviour { [HideInInspector] public bool start = false; [HideInInspector] public float fadeDamp = 0.0f; [HideInInspector] public string fadeScene; [HideInInspector] public float alpha = 0.0f; [HideInInspector] public Color fadeColor; [HideInInspector] public bool isFadeIn = false; CanvasGroup myCanvas; Image bg; float lastTime = 0; bool startedLoading = false; //Set callback void OnEnable() { SceneManager.sceneLoaded += OnLevelFinishedLoading; } //Remove callback void OnDisable() { SceneManager.sceneLoaded -= OnLevelFinishedLoading; } public void InitiateFader() { DontDestroyOnLoad(gameObject); //Getting the visual elements if (transform.GetComponent()) myCanvas = transform.GetComponent(); if (transform.GetComponentInChildren()) { bg = transform.GetComponent(); bg.color = fadeColor; } //Checking and starting the coroutine if (myCanvas && bg) { myCanvas.alpha = 0.0f; StartCoroutine(FadeIt()); } else Debug.LogWarning("Something is missing please reimport the package."); } IEnumerator FadeIt() { while (!start) { //waiting to start yield return null; } lastTime = Time.time; float coDelta = lastTime; bool hasFadedIn = false; while (!hasFadedIn) { coDelta = Time.time - lastTime; if (!isFadeIn) { //Fade in alpha = newAlpha(coDelta, 1, alpha); if (alpha == 1 && !startedLoading) { startedLoading = true; SceneManager.LoadScene(fadeScene); } } else { //Fade out alpha = newAlpha(coDelta, 0, alpha); if (alpha == 0) { hasFadedIn = true; } } lastTime = Time.time; myCanvas.alpha = alpha; yield return null; } Initiate.DoneFading(); Debug.Log("Your scene has been loaded , and fading in has just ended"); Destroy(gameObject); yield return null; } float newAlpha(float delta, int to, float currAlpha) { switch (to) { case 0: currAlpha -= fadeDamp * delta; if (currAlpha <= 0) currAlpha = 0; break; case 1: currAlpha += fadeDamp * delta; if (currAlpha >= 1) currAlpha = 1; break; } return currAlpha; } void OnLevelFinishedLoading(Scene scene, LoadSceneMode mode) { StartCoroutine(FadeIt()); //We can now fade in isFadeIn = true; } }