- Home /
GUILayout.Label is not displaying on level load
I have a script that is checking a line from a text file and then displaying the word using Labels. I call the function that gets the line in Start() and my GUILayout.Label is being run in OnGUI(). I also call the function to get a line on a button press in OnGUI(). Problem is, that the Layout will only display when I press the button, but not on the first check of OnGUI() after Start() runs. I have verified that the I am getting a valid word to display in Start(), so I have no idea why the Label is not displaying. my code follows:
function Start()
{
Debug.Log("Script has Started");
if(newgame == true)
{
newgame = false;
word = "";
GetWord();
}
}
function GetWord()
{
keyboardInstance.win = false;
keyboardInstance.played = false;
keyboardInstance.rightLetterCount = 0;
keyboardInstance.wrongCount = 0;
keyboardInstance.a = a;
keyboardInstance.b = b;
keyboardInstance.c = c;
keyboardInstance.d = d;
keyboardInstance.e = e;
keyboardInstance.f = f;
keyboardInstance.g = g;
keyboardInstance.h = h;
keyboardInstance.i = i;
keyboardInstance.j = j;
keyboardInstance.k = k;
keyboardInstance.l = l;
keyboardInstance.m = m;
keyboardInstance.n = n;
keyboardInstance.o = o;
keyboardInstance.p = p;
keyboardInstance.q = q;
keyboardInstance.r = r;
keyboardInstance.s = s;
keyboardInstance.t = t;
keyboardInstance.u = u;
keyboardInstance.v = v;
keyboardInstance.w = w;
keyboardInstance.x = x;
keyboardInstance.y = y;
keyboardInstance.z = z;
for (keyboardInstance.keyIndex = 0; keyboardInstance.keyIndex < 26; keyboardInstance.keyIndex++)
{
keyboardInstance.keyPressed[keyboardInstance.keyIndex] = false;
}
var sr : StreamReader = new StreamReader(path);
var fileContents = sr.ReadToEnd();
sr.Close();
var randomNumber = Random.Range(0, numWords);
var i : int = randomNumber;
var lines = fileContents.Split("\n"[0]);
for (line in lines[i]) {
word += line;
}
textureArray = new Texture[(word.length - 1)];
dashWidth = Screen.width/(word.length - 1);
for (index = 0; index < (word.length - 1); index++){
textureArray[index] = underscore;
}
activeWord = true;
Debug.Log(word);
}
function OnGUI () {
if (word != ""){
GUI.Label(Rect(Screen.width/2,Screen.height/2,70,70),textureArray[0]);
GUILayout.BeginArea(Rect(Screen.width/2 - ((word.Length - 1) * 70)/2,Screen.height - Screen.height/2,70 * (word.Length - 1),(Screen.height - Screen.height/2)/2));
GUILayout.BeginHorizontal();
for (counter = 0; counter < chars; counter++)
{
GUILayout.Label(textureArray[counter]);
}
GUILayout.EndHorizontal();
GUILayout.EndArea();
activeWord = false;
}
if (GUI.Button(Rect(20,260,100,100),"",newGame)){
if (word != ""){
word = "";
GetWord();
}
Answer by DaveA · May 20, 2011 at 09:11 PM
Are you sure newgame is true before Start? Is it declared like var newgame = true; ?
Yes, I am setting newgame = true in the OnLevelWasLoaded() function, which is the first part of the script to run.
Yes, I have sent comments to the Debug.Log() and have confirmed the the script runs in the order of OnLevelWasLoaded() -> Awake() -> Start() -> OnGUI()
In Start you set word = ""; an in OnGUI, will only display the empty-string button if word == "" I would find another condition or set word = " " or something like that.