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

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