This GUI script gives me a weird error. It shows up on screen and I can press the buttons and they will change the variable as they are supposed to. But after that the script won’t continue.
public void ChooseMove() {
if (isPlayer) { //If it's the player, show the GUI
showGUI=true;
OnGUI ();
} else { //If it's the computer, make a random choice
int rand = Random.Range(0,2);
currentMove = moves[rand];
}
}
void OnGUI () {
if (showGUI) {
GUI.Box (new Rect (10, 10, 100, 140), "");
if (GUI.Button (new Rect (20, 40, 80, 20), "Attack")) { //MAKE ATTACK BUTTON
currentMove = "Attack";
showGUI = false;
}
if (GUI.Button (new Rect (20, 70, 80, 20), "Defend")) { //MAKE DEFEND BUTTON
currentMove = "Defend";
showGUI = false;
}
if (GUI.Button (new Rect (20, 100, 80, 20), "Spell")) { //MAKE SPELL BUTTON
currentMove = "Spell";
showGUI = false;
}
if (GUI.Button (new Rect (20, 130, 80, 20), "Run")) { //MAKE RUN BUTTON
currentMove = "Run";
showGUI = false;
}
}
}
and the error:
ArgumentException: You can only call GUI functions from inside OnGUI.
UnityEngine.GUIUtility.CheckOnGUI () (at C:/BuildAgent/work/d63dfc6385190b60/artifacts/EditorGenerated/GUIUtility.cs:229)
UnityEngine.GUI.Box (Rect position, UnityEngine.GUIContent content, UnityEngine.GUIStyle style) (at C:/BuildAgent/work/d63dfc6385190b60/artifacts/EditorGenerated/GUI.cs:373)
UnityEngine.GUI.Box (Rect position, System.String text) (at C:/BuildAgent/work/d63dfc6385190b60/artifacts/EditorGenerated/GUI.cs:366)
MobInfo.OnGUI () (at Assets/MobInfo.cs:42)
MobInfo.ChooseMove () (at Assets/MobInfo.cs:33)
TurnBasedSystem.Combat (.MobInfo encounter1, .MobInfo encounter2) (at Assets/TurnBasedSystem.cs:46)
Collision.OnTriggerEnter (UnityEngine.Collider other) (at Assets/Collision.cs:10)
As you can see in the error the call for OnGUI is derived in multiple steps, and the code freezes at the first instance of the call (the function “TurnBasedSystem.Combat()” won’t continue).