-
-
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?