UnityGameProjectsCode / Rise2Point0Game / Tools / FadeInAndOut.cs
FadeInAndOut.cs
Raw
using UnityEngine;
using UnityEngine.UI;

public class FadeInAndOut : MonoBehaviour
{
    public float fadeSpeed;
    public float waitTime;
    private float maxAlpha = 1;
    private float startingAlpha = 0;
    private float startTime;
    private float currentAlpha;
    private float journeyLength;
    private bool fadeInComplete;
    private bool fadeOutComplete;
    private bool waiting;
    private float timeWaiting = 0;

    SpriteRenderer spriteTarget;
    Image imageTarget;
    Text textTarget;

    private void Start()
    {
        startTime = Time.time;
        journeyLength = maxAlpha;

        //can be a sprite, image, or text
        if (GetComponent<SpriteRenderer>())
            spriteTarget = GetComponent<SpriteRenderer>();
        else if (GetComponent<Image>())
            imageTarget = GetComponent<Image>();
        else if (GetComponent<Text>())
            textTarget = GetComponent<Text>();
    }

    private void FixedUpdate()
    {
        if (!fadeOutComplete)
        {
            if (waiting)
            {
                timeWaiting += Time.fixedDeltaTime;

                if (timeWaiting > waitTime)
                {
                    maxAlpha = 0;
                    startingAlpha = 1;
                    startTime = Time.time;
                    waiting = false;
                }
            }
            else
            {
                currentAlpha = (Time.time - startTime) * fadeSpeed;
                float fracJourney = currentAlpha / journeyLength;

                if (spriteTarget != null)
                {
                    spriteTarget.color = new Color(spriteTarget.color.r, spriteTarget.color.g, spriteTarget.color.b, Mathf.InverseLerp(startingAlpha, maxAlpha, fracJourney));

                    if (spriteTarget.color.a == maxAlpha)
                    {
                        if (fadeInComplete)
                        {
                            fadeOutComplete = true;
                        }
                        else
                        {
                            fadeInComplete = true;
                            waiting = true;
                        }
                    }
                }
                else if (imageTarget != null)
                {
                    imageTarget.color = new Color(imageTarget.color.r, imageTarget.color.g, imageTarget.color.b, Mathf.InverseLerp(startingAlpha, maxAlpha, fracJourney));

                    if (imageTarget.color.a == maxAlpha)
                    {
                        if (fadeInComplete)
                        {
                            fadeOutComplete = true;
                        }
                        else
                        {
                            fadeInComplete = true;
                            waiting = true;
                        }
                    }
                }
                else if (textTarget != null)
                {
                    textTarget.color = new Color(textTarget.color.r, textTarget.color.g, textTarget.color.b, Mathf.InverseLerp(startingAlpha, maxAlpha, fracJourney));

                    if (textTarget.color.a == maxAlpha)
                    {
                        if (fadeInComplete)
                        {
                            fadeOutComplete = true;
                        }
                        else
                        {
                            fadeInComplete = true;
                            waiting = true;
                        }
                    }
                }
            }
        }
    }

    public void ResetTextFade()
    {
        startTime = Time.time;
        timeWaiting = 0.0f;
        waiting = false;
        fadeOutComplete = false;
        fadeInComplete = false;
        maxAlpha = 1;
        startingAlpha = 0;
    }
}