- 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
![](https://koobas.hobune.stream/wayback/20220613200852im_/https://answers.unity.com/themes/thub/images/avi.jpg)
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