- Home /
Key input changing Label (Object reference not set) error
Hey Guys, I'm in the process of making a simple building game at the moment and I'd like to have the basics of it down so at the moment instead of building I'm just creating labels and changing their text on the screen. I have a script that calls the empty label component then when the H key is pressed it should fill that label with a message varying between the if else section. The if else calls its variables from another class I have where they are kept static at the moment.
When executing the program it will run but on pressing the "H" key I get the error
"NullReferenceException: Object reference not set to an instance of an object UnityEngine.GUI.Label (Rect position, System.String text) SHOWMESSAGE.OnGUI () (at Assets/GameGrass/SHOWMESSAGE.cs:16) SHOWMESSAGE.Start () (at Assets/GameGrass/SHOWMESSAGE.cs:9) "
and nothing in the game changes.
public class SHOWMESSAGE : MonoBehaviour {
// Use this for initialization
void Start () {
}
static void OnGUI() {
string message = "";
GUI.Label(new Rect(50, 50, 100, 20), "" + message + "");
if (Input.GetKeyDown("h"))
{
if(variablesResources.GetWood() >= 3)
{
message = "YOU BUILT A HOUSE";
variablesResources.SetWood(-3);
}
else
{
message = "YOU DONT HAVE ENOUGH WOOD";
}
}
} }
i'm not sure if this one changes anything but I'll post it anyway
public class variablesResources : MonoBehaviour {
static int woodResource;
static public int GetWood()
{
return woodResource;
}
static public void SetWood(int increment)
{
woodResource += increment;
}
}
I'm relatively new to C# so any feedback is helpful :) thanks
Answer by GuyTidhar · Apr 07, 2013 at 01:21 PM
A few issues:
private string message = "";
void Update()
{
if (Input.GetKeyDown("h")) // You must use 'Input' only at the 'Update' functions
{
if(variablesResources.GetWood() >= 3)
{
message = "YOU BUILT A HOUSE";
variablesResources.SetWood(-3);
}
else
{
message = "YOU DONT HAVE ENOUGH WOOD";
}
}
}
void OnGUI() // Is not static and you should not be making it so
{
GUI.Label(new Rect(50, 50, 100, 20), message);
}
Thanks! works perfectly :) and i'll keep the update() use in $$anonymous$$d, I assumed I could also use onGUI because it updates as frequently. Guess not!
Glad to had helped.
OnGUI is called frequently, but Input still must be used only withing the different Update functions.
OnGUI is actually called more then once at the same time that Update is called once. So You should generally not call anything related to calculations and processed within OnGUI. Only call GUI stuff in it and rise flags (for instance isButtonClicked = true;). Otherwise you could be processing data more times then you actually need.
Your answer
Follow this Question
Related Questions
Game crashes after splash screen 2 Answers
Distribute terrain in zones 3 Answers
Missing parts when I build my game.... 2 Answers
Game crashes after build. 2 Answers
Can't export game 3 Answers