GUI.DrawTexture Fade In/Out Problem

Hi, I made a sample scene that includes GUI texture. I try to make fade in/out effect with using Color.Lerp. The problem is i cant make fade in and out animation consecutivly. It doesnt matter what the order is, the second fade animation completes suddenly without fade effect. Here is the code you can try. Just copy paste it any scene, you will see the result. Is it a bug or what it is i dont know and need some help. Hope someone help me :slight_smile:

Here is the code:

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class Fader : MonoBehaviour {
	private Texture2D bg;
	private bool displayScreenFade = false;

	private string fadeType = "fadeOut";
	public Color lerpedColor = new Color(0, 0, 0, 1);


	// Use this for initialization
	void Start () {
		bg = new Texture2D (1, 1);
		bg.SetPixel(0, 0, new Color(0, 0, 0));
		bg.Apply ();

		StartCoroutine (fadeAnim());
	}
	
	// Update is called once per frame
	void Update () {
		if(displayScreenFade){
			if(fadeType == "fadeOut"){
				lerpedColor = Color.Lerp(new Color(0, 0, 0, 0), new Color(0, 0, 0, 1), Time.time);
			}else {
				lerpedColor = Color.Lerp(new Color(0, 0, 0, 1), new Color(0, 0, 0, 0), Time.time);
			}
		}
	}

	void OnGUI(){
		GUI.color = lerpedColor;
		GUI.DrawTexture(new Rect(0, 0, Screen.width, Screen.height), bg);
	}

	IEnumerator fadeAnim() {
		displayScreenFade = true;

		fadeType = "fadeOut";
		yield return new WaitForSeconds(2);

		fadeType = "fadeIn";
		yield return new WaitForSeconds(2);

		displayScreenFade = false;
	}
}

Becuase you are using Time.time for your ratio. When you start it is 0 and up to 1 but when you try again it is already a value greater than 1 so the movement happens all at once.

Move your lerping in the coroutine maybe like this:

IEnumerator fadeIn() {
    while(color.a > 0){
        color.a -= Time.deltaTime;
        yield return null;
    } 
}
IEnumerator fadeOut() {
    while(color.a < 0.99){
        color.a += Time.deltaTime;
        yield return null;
    }
}