- Home /
While loop won't stop crashing!!!
I am trying to make a while loop. I've no idea why the condition won't terminate.
Here's my code:
public void Damaged (float _timer, Vector3 _direct) {
Debug.Log (HitTimer);
while (HitTimer < _timer)
{
transform.position += _direct * MovementSpeed * Time.deltaTime;
}
In this, HitTimer is increasing by Time.deltatime in the update function, being zeroed out before the start, (I've checked that), and _timer is .5f; I can't think of why this isn't ending. Any ideas?
Have you tried to Debug.Log both HitTimer and _timer inside of the loop to see what the values are while the program is running?
What do you mean by " being zeroed out before the start"? Where is it being zeroed out...? Please can you post the code that has this in it, thanks.
Answer by Bunny83 · Oct 23, 2014 at 12:23 PM
Unity uses a single thread for the whole scripting environment and that's the main thread. If you doing a while loop like this the current frame will be stuck inside that while loop. Since nothing else is executed besides what's inside that while loop you will never exit the while loop because HitTimer nor _timer can't possibly change.
You might want to create a coroutine for this. This allows you to write "sequential code" which can be interrupted at yield statements :
public IEnumerator Damaged (float _timer, Vector3 _direct)
{
Debug.Log (HitTimer);
while (HitTimer < _timer)
{
transform.position += _direct * MovementSpeed * Time.deltaTime;
yield return null; // leave the coroutine and come back next frame
}
}
To start a coroutine you have to use StartCoroutine. Instead of just calling the method you have to pass the result to StartCoroutine:
StartCoroutine(Damaged(yourTimerValue, yourDirectVector));
This did it! Thank you so much, I think I understand better now!
Your answer
Follow this Question
Related Questions
Multiple Cars not working 1 Answer
Distribute terrain in zones 3 Answers
Callback from a Loop 1 Answer
Why does it seem as if my code is exuting in wrong order? 0 Answers
How can I constantly change the position of a target when an object reaches it. 0 Answers