Last active
February 5, 2022 15:59
-
-
Save NovaSurfer/5f14e9153e7a2a07d7c5 to your computer and use it in GitHub Desktop.
Unity3D screen fading script (using new UI)
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
using UnityEngine; | |
using UnityEngine.UI; | |
using System.Collections; | |
using UnityEngine.SceneManagement; | |
public class ScreenFader : MonoBehaviour | |
{ | |
public Image FadeImg; | |
public float fadeSpeed = 1.5f; | |
public bool sceneStarting = true; | |
void Awake() | |
{ | |
FadeImg.rectTransform.localScale = new Vector2(Screen.width, Screen.height); | |
} | |
void Update() | |
{ | |
// If the scene is starting... | |
if (sceneStarting) | |
// ... call the StartScene function. | |
StartScene(); | |
} | |
void FadeToClear() | |
{ | |
// Lerp the colour of the image between itself and transparent. | |
FadeImg.color = Color.Lerp(FadeImg.color, Color.clear, fadeSpeed * Time.deltaTime); | |
} | |
void FadeToBlack() | |
{ | |
// Lerp the colour of the image between itself and black. | |
FadeImg.color = Color.Lerp(FadeImg.color, Color.black, fadeSpeed * Time.deltaTime); | |
} | |
void StartScene() | |
{ | |
// Fade the texture to clear. | |
FadeToClear(); | |
// If the texture is almost clear... | |
if (FadeImg.color.a <= 0.05f) | |
{ | |
// ... set the colour to clear and disable the RawImage. | |
FadeImg.color = Color.clear; | |
FadeImg.enabled = false; | |
// The scene is no longer starting. | |
sceneStarting = false; | |
} | |
} | |
public IEnumerator EndSceneRoutine(int SceneNumber) | |
{ | |
// Make sure the RawImage is enabled. | |
FadeImg.enabled = true; | |
do | |
{ | |
// Start fading towards black. | |
FadeToBlack(); | |
// If the screen is almost black... | |
if (FadeImg.color.a >= 0.95f) | |
{ | |
// ... reload the level | |
SceneManager.LoadScene(SceneNumber); | |
yield break; | |
} | |
else | |
{ | |
yield return null; | |
} | |
} while (true); | |
} | |
public void EndScene(int SceneNumber) | |
{ | |
sceneStarting = false; | |
StartCoroutine("EndSceneRoutine", SceneNumber); | |
} | |
} |
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
using UnityEngine; | |
using System.Collections; | |
public class LevelChanger : MonoBehaviour { | |
ScreenFader fadeScr; | |
public int SceneNumb; | |
void Awake() | |
{ | |
fadeScr = GameObject.FindObjectOfType<ScreenFader>(); | |
} | |
void OnTriggerEnter(Collider col) | |
{ | |
if (col.gameObject.tag == "Player") | |
{ | |
fadeScr.EndScene(SceneNumb); | |
} | |
} | |
} |
Awesome stuff! But I'm curious, why do you not disable the image after the fade is over, for efficiency's sake?
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
hello, i'm trying to call the function EndScene(SceneNumb) from another script but it gives me an error ( NullReferenceException: Object reference not set to an instance of an object
StartMenu.StartLevel () (at Assets/Scripts/StartMenu.cs:130)
UnityEngine.Events.InvokableCall.Invoke (System.Object[] args) (at C:/buildslave/unity/build/Runtime/Export/UnityEvent.cs:153)
UnityEngine.Events.InvokableCallList.Invoke (System.Object[] parameters) (at C:/buildslave/unity/build/Runtime/Export/UnityEvent.cs:630)
UnityEngine.Events.UnityEventBase.Invoke (System.Object[] parameters) (at C:/buildslave/unity/build/Runtime/Export/UnityEvent.cs:765)
UnityEngine.Events.UnityEvent.Invoke () (at C:/buildslave/unity/build/Runtime/Export/UnityEvent_0.cs:53)
UnityEngine.UI.Button.Press () (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/UI/Core/Button.cs:35)
UnityEngine.UI.Button.OnPointerClick (UnityEngine.EventSystems.PointerEventData eventData) (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/UI/Core/Button.cs:44)
UnityEngine.EventSystems.ExecuteEvents.Execute (IPointerClickHandler handler, UnityEngine.EventSystems.BaseEventData eventData) (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/EventSystem/ExecuteEvents.cs:52)
UnityEngine.EventSystems.ExecuteEvents.Execute[IPointerClickHandler](UnityEngine.GameObject target, UnityEngine.EventSystems.BaseEventData eventData, UnityEngine.EventSystems.EventFunction`1 functor) (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/EventSystem/ExecuteEvents.cs:269)
UnityEngine.EventSystems.EventSystem:Update())
can you help me please ?