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!