- Home /
Trying to Loop A Function
Hi,
I am trying to loop a function and invoke repeating doesn't fit with my needs. I am trying to use a while loop but no matter what I try it crashes Unity.
Here is an example of the current code:
function PowerUseage(start : boolean){
while (start == true){
if(powerUsageIsRunning == false){
//Switch so that cycle runs once a second
powerUsageIsRunning = true;
//Remove Power amount for this second
//Wait
yield WaitForSeconds(1);
//Allow cycle to start again
powerUsageIsRunning = false;
}
}
}
It seems every time I go near a while loop I crash Unity. Any ideas?
Thanks :)
Answer by robertbu · Jul 28, 2013 at 11:40 PM
The problem is that if start != true, then a yield is never executed. If a loop does not have a yield or an exit, it hangs Unity. I'm not sure what exit strategy you want here. Since start is passed in and will be local, there is no way for start to be any value other than the one passed in. If you make a new call with 'false' to this Coroutine, it does not reset the value of the original coroutine, but launches a new coroutine, so you have two coroutines running, which will cause all sorts of problems with your value of 'powerUsageIsRunning' variable if you called two with 'true'. Plus the way this is structured, powerUsageIsRunning will never be false. That is you set it to false, and it immediately cycles back to the top and sets it to true without waiting. I think you want something like this:
function PowerUseage(){
while (usePower){
powerUsageIsRunning = !powerUsageIsRunning;
yield WaitForSeconds(1);
}
}
}
'usePower' is a variable you define at at the top of the file. You set it to 'false' if you want this routine to terminate. This code will invert the on and of state of powerUsageRunning every second.
Finally I get it! And the whole boolean invert method is something I had never thought of. Thanks Robertbu and of course Jamora.
Answer by Jamora · Jul 28, 2013 at 11:32 PM
While loops keep repeating for as long as its condition is true. You never set your while condition to false, so you never break out of the loop. You need start = false;
at some point inside the loop.
Your answer
Follow this Question
Related Questions
How do I call a function containing a while loop, inside the update function? 2 Answers
while loop not looping 2 Answers
How do I repeat a part of my script? 2 Answers
Call a function repeatedly while a boolean is true 3 Answers
While loop crashing 2 Answers