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[i] == 1){
                 redbutton.gameObject.SetActive (true);
                 yield return new WaitForSeconds (2);
                 redbutton.gameObject.SetActive (false);
             }
             if (gamePick[i] == 2){
                 bluebutton.gameObject.SetActive (true);
                 yield return new WaitForSeconds (2);
                 bluebutton.gameObject.SetActive (false);
             }
             if (gamePick[i] == 3){
                 yellowbutton.gameObject.SetActive (true);
                 yield return new WaitForSeconds (2);
                 yellowbutton.gameObject.SetActive (false);
             }
             if (gamePick[i] == 4){
                 greenbutton.gameObject.SetActive (true);
                 yield return new WaitForSeconds (2);
                 greenbutton.gameObject.SetActive (false);
             }
         }
     }
 
              Answer by metalted · Sep 15, 2016 at 01:06 PM
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!
Thanks! It worked flawlessly! Actually you gave me a couple ideas of how can I implement timers and use them for more than one thing.
Awesome! Thanks again!
Your answer