- Home /
NullReferenceException: Object reference not set to an instance of an object
i am trying to make a command where: you press the space bar button and the health bar goes down by 10 health, but i am accessing this health variable from another script.
this time i am having another issue with this code.
during play mode when i pressed the space bar button to lower the health, the health bar doesnt change and this error comes up : NullReferenceException: Object reference not set to an instance of an object
this is my code:
using UnityEngine;
using System.Collections;
public class keyboard : MonoBehaviour {
private healthgui heal;
// Use this for initialization
void awake () {
heal = this.gameObject.GetComponent<healthgui>();
}
// Update is called once per frame
void Update () {
int newHealth;
int gethealth;
if (Input.GetKey(KeyCode.Space)) {
gethealth = heal.health;
newHealth = heal.health - 10;
heal.health = newHealth;
}
}
}
heres my other code just incase
public class healthgui : MonoBehaviour {
//these floats are used to easily configure the GUI Image//
//health image size and positioning floats//
public float guiHealthWidth;
public float guiHealthHeight;
public float guiHealthDistLeft;
public float guiHealthDistTop;
public int health = 100;
public GUIStyle healthbar;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void OnGUI () {
//Displays health Hud//
GUI.Box (new Rect(
(Screen.width/16) * guiHealthDistLeft,
(Screen.height/16) * guiHealthDistTop,
(Screen.width/16) * guiHealthWidth,
(Screen.height/16) * guiHealthHeight),
health.ToString(),healthbar);
}
}
Is there a healthgui script attached to the same gameobject keyboard is attached to? it appears heal is null, meaning GetComponent didn't find it on the gameobject that keyboard is attached to.
add a debug statement to check:
void awake () {
heal = this.gameObject.GetComponent<healthgui>();
if (heal == null)
Debug.Log("Heal was not found on the current gameobject");
else
Debug.Log("Was able to find the component Heal");
}
it seems to be highlighting the gethealth = heal.health;
Correct. If i remember your script correctly, health is just an int, if not explicitly declared it's 0, that is not the issue, as i stated already, heal is not being found, so it's null and hence your problems. it is not finding the component. If you add the debug statement i posted above, what happens? what does the console say? Nothing(indicating it was found) or otherwise?
nothing changes
and my health int in my other script is set to 100
Answer by jokim · Aug 22, 2014 at 05:48 PM
Landern was on the right track with his answer, just a few details off.
the function should be Awake, and not awake. I know, it's silly, but that's how it is.
void Awake () {
heal = this.gameObject.GetComponent<healthgui>();
if (heal == null)
Debug.Log("Heal was not found on the current gameobject");
else
Debug.Log("Was able to find the component Heal");
}
Damn i didnt even notice (i usually pick up on these things)
Your answer
![](https://koobas.hobune.stream/wayback/20220613161247im_/https://answers.unity.com/themes/thub/images/avi.jpg)