How can I make a GUI Label disappear after a certain amount of time?

In my case I want the text to disappear a couple of seconds after I press space, I’ve looked at a bunch of solutions but I can’t figure it out.

using UnityEngine;
using System.Collections;

public class GUI_Label : MonoBehaviour {

public Rect position = new Rect(Screen.width / 2, Screen.height / 2, 100, 100);

public string text ="";

public GUIStyle style = null;

private void Start()
{}

private void OnGUI()
{
   if (Input.GetKey(KeyCode.Space))
    {       
        GUI.Label(position, text, style);
    }
}

}

Here are two different approaches…

Using states…

using UnityEngine;
using System.Collections;

public class GUI_Label : MonoBehaviour
{
	public Rect position = new Rect(Screen.width / 2, Screen.height / 2, 100, 100);
	public string text ="";
	public GUIStyle style = null;

	// Variables for making the text disappear
	public float hideTextDuration;
	private float startTime = 0f;
	private TextDisplayState textState = TextDisplayState.Showing;
	private enum TextDisplayState
	{
		Showing,
		Disappearing,
		NotShowing
	};

	// Update is called once per frame
	private void Update()
	{
		if (textState == TextDisplayState.Showing)
		{
			if (Input.GetKeyUp(KeyCode.Space))
			{
				startTime = Time.time;
				textState = TextDisplayState.Disappearing;
			}
		}
		else if (textState == TextDisplayState.Disappearing)
		{
			if (Time.time - startTime > hideTextDuration)
			{
				textState = TextDisplayState.NotShowing;
			}
		}
	}

	// Called (several times per frame) for rendering and handling GUI events.
	private void OnGUI()
	{
		if (textState != TextDisplayState.NotShowing)
		{
			GUI.Label(position, text, style);
		}
	}
}

Using coroutines…

using UnityEngine;
using System.Collections;

public class GUI_Label : MonoBehaviour
{
	public Rect position = new Rect(Screen.width / 2, Screen.height / 2, 100, 100);
	public string text ="";
	public GUIStyle style = null;

	// Variables for making the text disappear
	public float hideTextDuration;
	private bool shouldCheckInput = true;
	private bool shouldShowText = true;

	// Update is called once per frame
	private void Update()
	{
		if (shouldCheckInput)
		{
			if (Input.GetKeyUp(KeyCode.Space))
			{
				shouldShowText = true;
				shouldCheckInput = false;
				StartCoroutine(WaitAndMakeTextDisappear(hideTextDuration));
			}
		}
	}

	private IEnumerator WaitAndMakeTextDisappear(float waitTimeInSeconds)
	{
		yield return new WaitForSeconds(waitTimeInSeconds);
		shouldShowText = false;
	}

	// Called (several times per frame) for rendering and handling GUI events.
	private void OnGUI()
	{
		if (shouldShowText)
		{
			GUI.Label(position, text, style);
		}
	}
}

@ellioman Thanks! The coroutines method worked after I added “shouldShowText = true;” to the if input section. I couldn’t get the states method to work :confused:
Here’s the final result:
using UnityEngine;
using System.Collections;

public class Memes_GUI : MonoBehaviour
{
public Rect position = new Rect(Screen.width / 2, Screen.height / 2, 100, 100);
public string text = “”;
public GUIStyle style = null;

// Variables for making the text disappear
public float hideTextDuration;
private bool shouldCheckInput = true;
private bool shouldShowText = false;

// Update is called once per frame
private void Update()
{
    if (shouldCheckInput)
    {
        if (Input.GetKeyUp(KeyCode.Space))
        {
            shouldCheckInput = false;
            shouldShowText = true;
            StartCoroutine(WaitAndMakeTextDisappear(hideTextDuration));
        }
    }
}

private IEnumerator WaitAndMakeTextDisappear(float waitTimeInSeconds)
{
    yield return new WaitForSeconds(2);
    shouldShowText = false;
}

// Called (several times per frame) for rendering and handling GUI events.
private void OnGUI()
{
    if (shouldShowText)
    {
        GUI.Label(position, text, style);
    }
}

}