-
-
Save NovaSurfer/5f14e9153e7a2a07d7c5 to your computer and use it in GitHub Desktop.
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); | |
} | |
} |
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); | |
} | |
} | |
} |
@shaneparsons, hi check out new revision. I updated the script and added an example
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 ?
Awesome stuff! But I'm curious, why do you not disable the image after the fade is over, for efficiency's sake?
@NovaSurfer I don't understand the following implementation code
ScreenFader fadeScr;
and<Fade>
are giving me errors as well... Is there an easier way to trigger the function, say from a button?