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; } }