How do I make a script wait X time?

Hi!

I’m trying to do a “Simon says” simple game and I’m stuck at an important part of it.

When I start the game I wait until the system calculates the color order via RNG stored in a list, done that the game should show me the order of those colors.

The problem is that I’m trying to make the script activate a button (An image with glow effect) for X seconds and then desactivate it in order to give to the player time to memorize the color order, but even using WaitForSeconds or Thread.Sleep the SetActive true/false happens too fast to realize which color you have to press.

Don’t know if there’s something that I’m doing wrong related to invoking it at Update() or LateUpdate() / FixedUpdate().

Here’s an example of my code:

private IEnumerator gamePickShow(){
		for (int i=0; i < gamePick.Count; i++ ){
			if (gamePick *== 1){*
  •  		redbutton.gameObject.SetActive (true);*
    
  •  		yield return new WaitForSeconds (2);*
    
  •  		redbutton.gameObject.SetActive (false);*
    
  •  	}*
    

_ if (gamePick == 2){_
* bluebutton.gameObject.SetActive (true);*
* yield return new WaitForSeconds (2);*
* bluebutton.gameObject.SetActive (false);*
* }*
_ if (gamePick == 3){
* yellowbutton.gameObject.SetActive (true);
yield return new WaitForSeconds (2);
yellowbutton.gameObject.SetActive (false);
}
if (gamePick == 4){
greenbutton.gameObject.SetActive (true);
yield return new WaitForSeconds (2);
greenbutton.gameObject.SetActive (false);
}
}
}*_

I’m not a big fan of coroutines and waitForSeconds(). I usually make a simple counter using some floats and booleans:

//How many seconds do we wait?
public float waitTime = 3.0f;
//Timer counter
private float timer;
//Is the timer active?
private bool timerActive = false;
//Is the button active?
public bool buttonActive = false;

void Update()
{
    //If event happends, for now a button, but can be whatever you want
    if (Input.GetKeyDown("x"))
    {
        //We want the timer to start counting
        timerActive = true;
        //Button to be active
        buttonActive = true;
    }

    //If the timer is active
    if (timerActive)
    {
        //Add seconds to the counter
        timer += 1 * Time.deltaTime;

        //If the timer is greater than the time we want to wait
        if(timer > waitTime)
        {
            //The button is no longer active
            buttonActive = false;
            //The timer stops
            timerActive = false;
            //Reset the timer
            timer = 0.0f;
        }
    }
}

It just a multi-purpose timer script. Don’t think it needs a lot of explaining. Hope this helps!