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