- Home /
Instantiation from class
i keep getting NullReferenceException but i can't really understand where the problem is these are the scripts i'm using:
using UnityEngine; using System.Collections;
[System.Serializable]
public class SomeClass {
public GameObject[] objects;
public SomeClass() {}
public GameObject GetRandomGameObject() {
return objects[Random.Range(0, objects.Length)];
}
}
[System.Serializable]
public class SomeClassContainer{
public SomeClass[] types;
public SomeClassContainer() {}
public GameObject PickRandomType(string x) {
if (x == "top") {
return types[6].GetRandomGameObject ();
}
return null;
}
}
[System.Serializable]
public class ArrayManager : MonoBehaviour {
public SomeClassContainer blue;
public SomeClassContainer red;
public SomeClassContainer yellow;
public SomeClassContainer GetBlue() {return null;}
public SomeClassContainer GetRed() {return null;}
public SomeClassContainer GetYellow() {return null;}
}
and here i call the class method to instantiate the random object: using UnityEngine; using System.Collections;
public class Spawn : MonoBehaviour {
public GameObject currentObject;
public Vector3 attachPosition;
private string x = "top";
GameObject randomObject;
// Use this for initialization
void Start () {
Check ();
}
// Update is called once per frame
void Update () {
}
void Check(){
ArrayManager am = GameObject.FindGameObjectWithTag("PiecesManager").GetComponent<ArrayManager>();
attachPosition = currentObject.transform.FindChild ("attach").transform.position;
if (currentObject.GetComponent<check> ().top == true) {
randomObject = am.GetBlue().PickRandomType(x); //here i get the error
Instantiate(randomObject, attachPosition, randomObject.transform.rotation);
}
}
}
i hope you can help me
Answer by Graham-Dunnett · Jul 15, 2015 at 08:54 PM
You say that line 20 in the second script has the problem. So, it's possible that am is null, meaning the FindGameObjectWithTag() fails to find a GO. (You don't check this in your code.) Alternatively, you call a GetBlue() function. Which is programmed to return null. You then call a PickRandomType() function on this null value. So this line is pretty much designed to cause a problem.
FindGameObjectWithTag() should work, otherwise it would give me error in line 20 that it doesn't find the getblue function. Without return null the function doesn't work, i have to return something
It definitely is the second suspicion Graham mentioned. You are calling method PickRandomType on a null, therefore null reference exception. You only can call methods on an class instance. Why don't you fix those getters to return the actual color properties ? Also, make sure they are instantiated from code, or assigned from editor (otherwise there would be the same error again):
public SomeClassContainer GetBlue() {return blue;}
public SomeClassContainer GetRed() {return red;}
public SomeClassContainer GetYellow() {return yellow;}
thinking of it now, i can't understand how i didn't noticed it.. thank you, it works good now :)
Your answer
Follow this Question
Related Questions
Random array issue C# 2 Answers
Random instantiation endlessly? 1 Answer
Spawn at random? 1 Answer
instantiating at a random time 1 Answer
How to create multiple Characters? 2 Answers