- Home /
NullReferenceException: Object reference not set to an instance of an object
I have two scripts. The first script BallControl is attached on a GameObject. The Second script Hero is attached on other GameObject. When I try to passing value Hero to BallControl, I receive an error message : "NullReferenceException: Object reference not set to an instance of an object" How can I solve this problem or how can I pass value script attached on an object to other script attached on an other object? Thanks for your time.
using UnityEngine;
using System.Collections;
public class BallControl : MonoBehaviour {
public int life = 0;
public GameObject hero;
void Update () {
Hero obj = GetComponent<Hero>();
life = obj.lifeBall;
if(life==20){
print("GameOver");
}
}
}
using UnityEngine;
using System.Collections;
public class Hero : MonoBehaviour {
public int lifeBall = 0;
public GameObject ball;
void Update () {
lifeBall++;
}
}
Answer by henrypuspurs · Jul 19, 2013 at 12:41 PM
I had this recently, try defining the exact Object the script you are referencing is on.
private GameObject player;
private Crosshair looking;
void Awake()
{
GameObject player = GameObject.Find("Player/Camera");
looking = player.GetComponent<Crosshair>();
}
Im too new to coding to tell you exactly what to do but in this example the script finds the Object called Camera under the Player parent, and makes that the player referenced in the script, then player.GetComponent fetches the Crosshair script (which in my case accesses a boolean statement to be used.
Answer by PAEvenson · Jul 19, 2013 at 12:36 PM
You kind of had the right idea...But this line here wont help you:
Hero obj = GetComponent<Hero>();
GetComponent will return the component if it is on that gameObject. You would need both scripts on the same object.
Here is what you should do:
using UnityEngine;
using System.Collections;
public class BallControl : MonoBehaviour {
public int life = 0;
public GameObject hero; //assign this in the inspector(in the unity editor)
void Update () {
life = hero.lifeBall;
if(life==20){
print("GameOver");
}
}
}
using UnityEngine;
using System.Collections;
public class Hero : MonoBehaviour {
public int lifeBall = 0;
public GameObject ball; //assign this in the inspector(in the unity editor)
void Update () {
lifeBall++;
}
}
Assign the gameObject inside the editor so you then have a reference to it. Once you obtain the reference you can then access its members and properties. Another way of finding the object is this:
Hero obj = GameObject.Find("[name of Hero GameObject]").GetComponent<Hero>();