x


Can someone help me with Programming Delays?

Okay well, I have been trying different things for a while now because nothing seems to work.(C# of course) I have been using WaitForSeconds but it just doesn't work. What I am trying to do is on return disable a script, but this script also uses return to do play an animation, but I want it so you can only press it once to only be able to play the animation once. So since they use the same keycode to toggle it, it does successfully disable the code, but doesn't play the animation(of course). So I thought that I could just make it so it has a small delay before disabling the animation. Is there an easier way to make the script only work once? but then being able to toggle back on after a certain amount of time? Or would it be best to use this "delay" method? Also Here is the code I have for delay that doesn't work.

void Start () {

 }

 // Update is called once per frame
 void Update () {

 if(Input.GetKeyUp (KeyCode.Return)){

 StartCoroutine (Wait());

 GetComponent<rotationScript>().enabled = false;

 }

 }

 IEnumerator Wait(){

 yield return new WaitForSeconds(10f);

 } 

}

Regards, ~Connor

more ▼

asked Aug 05 '12 at 01:33 AM

CSpence97 gravatar image

CSpence97
-2 3

You just use "Invoke".

It is the most basic and most commonly-used command in all of video game programming.

Unless you're an expert or a systems programmer never touch coroutines or yield, etc etc for any reason.

It's just an ordinary Invoke command. Much of video game code is just 100s and 100s of lines of Invoke commands (or the equivalent commands in different systems), to make things start or end at different times.

It's a great pity that Unity even mention yield, etc in the docs as it is hugely confusing to new users.

Aug 05 '12 at 07:15 AM Fattie
(comments are locked)
10|3000 characters needed characters left

1 answer: sort voted first

Good use for a boolean

void Start () 
{
    bool clicked;
}

void Update () 
{
    if(!clicked)
    {
        if(Input.GetKeyUp (KeyCode.Return))
        {
            clicked=true;
            StartCoroutine (Wait());
            GetComponent<rotationScript>().enabled = false;
        }
    }
}

The bool makes this section run only once.

more ▼

answered Aug 05 '12 at 01:54 AM

OperationDogBird gravatar image

OperationDogBird
1.1k 1 8 15

I figured it out, What I did was just moved everything into the IEnumerator part except for the start coroutine and it worked fine. Wow am I a noob facepalm

Aug 05 '12 at 05:11 AM CSpence97
(comments are locked)
10|3000 characters needed characters left
Your answer
toggle preview:

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Topics:

x4154
x179

asked: Aug 05 '12 at 01:33 AM

Seen: 272 times

Last Updated: Aug 05 '12 at 07:15 AM