Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I wait for 3 seconds and then set a bool to true, in C#?

Tags:

c#

timer

unity3d

My script/game/thing make a gameobject move to the right and when I click dance (a button I created) it stops. Then when the counter (I may not need a counter but I want to wait 3 seconds) reaches like 3 (once you click on dance the counter starts) my gameobject is suppose to continue on going to the right.

If you can correct the code that would be cool. If you can correct it and explain to me what i did wrong it would be even more awesome. I just started learning C# on Unity.

using System;
using UnityEngine;
using System.Collections;

public class HeroMouvement : MonoBehaviour
{
    public bool trigger = true;
    public int counter = 0;
    public bool timer = false;

    // Use this for initialization

    void Start()
    {
    }

    // Update is called once per frame

    void Update()
    {  //timer becomes true so i can inc the counter

        if (timer == true)
        {
            counter++;
        }

        if (counter >= 3)
        {
            MoveHero();//goes to the function moveHero
        }

        if (trigger == true)
            transform.Translate(Vector3.right * Time.deltaTime); //This moves the GameObject to the right
    }

    //The button you click to dance 
    void OnGUI()
    {
        if (GUI.Button(new Rect(10, 10, 50, 50), "Dance"))
        {
            trigger = false;
            timer = true;//now that the timer is set a true once you click it,The uptade should see that its true and start the counter then the counter once it reaches 3 it goes to the MoveHero function      
        }
    }

    void MoveHero()
    {  //Set the trigger at true so the gameobject can move to the right,the timer is at false and then the counter is reseted at 0.
        trigger = true;
        timer = false;
        counter = 0;
    }
}
like image 717
Froob Avatar asked Jun 05 '13 00:06

Froob


2 Answers

You could do it quite easily with coroutines:

void Update()
{
    if (trigger == true)
        transform.Translate(Vector3.right * Time.deltaTime); //This moves the GameObject to the right
}

void OnGUI()
    {
        if (GUI.Button(new Rect(10, 10, 50, 50), "Dance"))
        {  
           StartCoroutine(DoTheDance());
        }
    }


 public IEnumerator DoTheDance() {
    trigger = false;
    yield return new WaitForSeconds(3f); // waits 3 seconds
    trigger = true; // will make the update method pick up 
 }

See https://docs.unity3d.com/Manual/Coroutines.html for more information about Coroutines and how to use them. They are pretty neat when trying to do a timed series of events.

like image 128
Jan Thomä Avatar answered Oct 20 '22 03:10

Jan Thomä


I think that the easiest way is using Invoke:

Unity3D Invoke

if (timer == true) Invoke("MoveHero", 3);
like image 44
vicman4 Avatar answered Oct 20 '22 04:10

vicman4