- Home /
Loop a function
Hi - does anyone know what I could do to loop this function, so when it gets to the end of the sequence it starts again?
var player : GameObject = null;
var cameraPortacabin : GameObject;
var text26 : GameObject;
var text27 : GameObject;
var text28 : GameObject;
var text29 : GameObject;
var screen1 : GameObject;
var screen2 : GameObject;
var lastKnownState : boolean = true; // set default to false if camera starts disabled
function Start () {
text26.SetActive(false);
text27.SetActive(false);
text28.SetActive(false);
text29.SetActive(false);
screen1.SetActive(false);
screen2.SetActive(false);
}
function Update ()
{
if (cameraPortacabin.active != lastKnownState)
{
lastKnownState = cameraPortacabin.active;
if (lastKnownState) // same as if (lastKnownState == true)
portacabinSequence();
}
if (cameraPortacabin.active == false) {
StopCoroutine("portacabinSequence");
screen2.SetActive(false);
text29.SetActive(false);
}
}
function portacabinSequence () {
screen1.SetActive(true);
text26.SetActive(true);
yield WaitForSeconds (6);
text26.SetActive(false);
text27.SetActive(true);
yield WaitForSeconds (10);
text27.SetActive(false);
text28.SetActive(true);
screen1.SetActive(false);
screen2.SetActive(true);
yield WaitForSeconds (9.5);
text28.SetActive(false);
text29.SetActive(true);
//yield WaitForSeconds(11);
//text29.SetActive(false);
//screen2.SetActive(false);
}
function waitForSecond(second : float) {
var timer : float = 0;
while(timer < second) {
if(player != null && player.active) {
timer += Time.deltaTime;
}
yield;
}
}
Best, Laurien
Answer by Immanuel-Scholz · Jun 11, 2015 at 10:34 AM
To turn a normal sequenced coroutine into a loop, just wrap the whole function into an "while(true)" loop.
So if you got
function myFunction() {
yield WaitForSeconds(1);
...
yield WaitForSeconds(1);
}
do this instead:
function myFunction() {
while (true) {
yield WaitForSeconds(1);
...
yield WaitForSeconds(1);
}
}
Be EXTREMELY sure to have at least one yield statement inside the loop, or else you will freeze your Unity Editor, loosing all unsaved data!
Another hint: You may look at the way how you call your coroutine. You need to wrap the call into StartCoroutine("portacabinSequence")
to work correctly together with your call to StopCoroutine
Your answer
Follow this Question
Related Questions
Why is my Unity Crashing when I call a fucntion within coroutine and vice versa? 0 Answers
Executing coroutines consecutively 0 Answers
StopCoroutine() is not stopping my coroutines 1 Answer
Slider issue: two sliders are used, but one takes all actions for both. 0 Answers
Sequentially wait for multiple coroutines to finish 0 Answers