- Home /
Object reference not set to an instance of an object.
I'm trying to create a basic simulation where cubes change color based on the color of adjacent cubes, but for some reason I keep getting this error:
NullReferenceException: Object reference not set to an instance of an object GOL_Determiner.Update () (at Assets/GOL_Determiner.cs:55)
I have verified that there is an object of the name I am trying to reference(created on Start).
using UnityEngine;
using System.Collections;
public class GOL_Determiner : MonoBehaviour
{
public bool alive = false;
GameObject obj_west;
GameObject obj_east;
GameObject obj_south;
GameObject obj_north;
GameObject obj_northwest;
GameObject obj_northeast;
GameObject obj_southwest;
GameObject obj_southeast;
int neighbor_number = 0;
public int upper_limit;
public int lower_limit;
public Transform initiator;
// Update is called once per frame
void Update ()
{
ColormapGenerator2D targetScript = initiator.GetComponent<ColormapGenerator2D>();
obj_north = GameObject.Find ("(" + gameObject.transform.position.x + "," + gameObject.transform.position.y.Equals(gameObject.transform.position.y + 1) + ")");
obj_northeast = GameObject.Find ("(" + gameObject.transform.position.x.Equals(gameObject.transform.position.x + 1) + "," + gameObject.transform.position.y.Equals(gameObject.transform.position.y + 1) + ")");
obj_northwest = GameObject.Find ("(" + gameObject.transform.position.x.Equals(gameObject.transform.position.x - 1) + "," + gameObject.transform.position.y.Equals(gameObject.transform.position.y + 1) + ")");
obj_south = GameObject.Find ("(" + gameObject.transform.position.x + "," + gameObject.transform.position.y.Equals(gameObject.transform.position.y - 1) + ")");
obj_southwest = GameObject.Find ("(" + gameObject.transform.position.x.Equals (gameObject.transform.position.x - 1) + "," + gameObject.transform.position.y.Equals(gameObject.transform.position.y - 1) + ")");
obj_southeast = GameObject.Find ("(" + gameObject.transform.position.x.Equals (gameObject.transform.position.x + 1) + "," + gameObject.transform.position.y.Equals(gameObject.transform.position.y - 1) + ")");
obj_west = GameObject.Find ("(" + gameObject.transform.position.x.Equals(gameObject.transform.position.x - 1) + "," + gameObject.transform.position.y + ")");
obj_east = GameObject.Find ("(" + gameObject.transform.position.x.Equals(gameObject.transform.position.x + 1) + "," + gameObject.transform.position.y + ")");
if (gameObject.transform.position.y != targetScript.height)
{
if (obj_north.renderer.material.color == Color.green)
{
neighbor_number = neighbor_number + 1;
}
}
if (gameObject.transform.position.y != targetScript.height && gameObject.transform.position.x != targetScript.length)
{
if (obj_northeast.renderer.material.color == Color.green)
{
neighbor_number = neighbor_number + 1;
}
}
if (gameObject.transform.position.y != targetScript.height && gameObject.transform.position.x != 0)
{
if (obj_northwest.renderer.material.color == Color.green)
{
neighbor_number = neighbor_number + 1;
}
}
if (gameObject.transform.position.y != 0)
{
if (obj_south.renderer.material.color == Color.green)
{
neighbor_number = neighbor_number + 1;
}
}
if (gameObject.transform.position.x != targetScript.length)
{
if (obj_east.renderer.material.color == Color.green)
{
neighbor_number = neighbor_number + 1;
}
}
if (gameObject.transform.position.x != 0)
{
if (obj_west.renderer.material.color == Color.green)
{
neighbor_number = neighbor_number + 1;
}
}
if (gameObject.transform.position.y != 0 && gameObject.transform.position.x != targetScript.length)
{
if (obj_southeast.renderer.material.color == Color.green)
{
neighbor_number = neighbor_number + 1;
}
}
if (gameObject.transform.position.y != 0 && gameObject.transform.position.x != 0)
{
if (obj_southwest.renderer.material.color == Color.green)
{
neighbor_number = neighbor_number + 1;
}
}
if (neighbor_number > upper_limit)
{
alive = false;
}
if (neighbor_number < lower_limit)
{
alive = false;
}
if (neighbor_number > lower_limit && neighbor_number < upper_limit)
{
alive = true;
}
if (alive == true)
{
gameObject.renderer.material.color = Color.green;
}
if (alive == false)
{
gameObject.renderer.material.color = Color.gray;
}
}
}
Answer by Addyarb · Jun 15, 2015 at 03:38 AM
To debug, first lets make sure there is indeed an object with that name existing. Not doubting you, just covering all the bases.
In the start function, put:
void Start(){
obj_south = GameObject.Find("obj_south");
if(obj_south)
Debug.Log(obj_south + " does actually exist");
else
Debug.Log("No object found for obj_south");
}
Next,
Lets check that there is a renderer on the object.
For this, put an extra line in your start function below the bit we just typed, that looks like this.
if(obj_south.GetComponent<Renderer>())
Debug.Log("obj_south has a renderer");
else
Debug.Log("No renderer found for obj_south");
Have confirmed that no object exists at script run time. Going to try a delay of 1 second~ before attempting to call the objects.
Test successful, it appears the script was executing before the objects were instantiated. Thanks for the help.
Edit: Never$$anonymous$$d, delay of one second and still getting object errors.
NullReferenceException: Object reference not set to an instance of an object GOL_Deter$$anonymous$$er.Update () (at Assets/GOL_Deter$$anonymous$$er.cs:55)
Edit2: Tested further with a delay of ten seconds, errors start at the execution of script regardless of delay.