I’m obviously not a great programmer, and I’m having a problem at the moment that I think stems from a fundamental misunderstanding of coroutines and yield.
Basically, I have a function used to display GUI texts according to a numbered variable when the player activates a terminal etc. I want the GUI message to display until the player hits a key, and then load the next message ( very similar to this, but I can’t figure it out)
So the two scripts are as follows (names simplified):
//Script 1
yield Script2.Display(1);
yield Script2.Display(2);
yield Script2.Display(3);
//Script 2
//this function enables the GUI script
function Display(messageNumber){
messagenumber = textnumber;
GetComponent(GUIDisplay).enabled = true;
yield MoveOn();
}
//this function turns the GUI off on keypress,
//so that it can be reloaded with the next value
function MoveOn(){
while(GetComponent(GUIDisplay).enabled){
if(Input.GetButtonDown("Skip"){
GetComponent(GUIDisplay).enabled = false;
}
yield;
}
}
Now, as I (mis)understand it, yielding the commands in Script 1 means that Script 1 will wait until each function is complete before moving to the next one. My problem is that I can’t get Script 2 (especially the MoveOn function) to work. I can get an infinite loop(crash), or simply cycle through all three commands in Script 1 instantly. I have read in other posts that while loops need a yield to prevent infinite looping, but it seems to me that putting in a yield simply gives control back to Display(), defeating the purpose of the loop (i.e. waiting for a keypress before ending)
BTW, it works fine using yield WaitforSeconds
, but I want the time to be set by the user (for slow readers!)
Any ideas what I’m missing here? Any commments much appreciated, and feel free to point out how little I know!