- Home /
Can't explain an NRE
Using code I've already written for a menu system...
public void MakeSubmenuOf(string[] menuToMake, string[] niceNames, GameObject parent, int number,
int fontSize, float x, float y, float offsetBetween) {
GameObject subMenuToMake = parent;
for (int i = 0; i < menuToMake.Length; i++) {
menuText[number,i] = new GameObject(menuToMake[i]);
menuText[number,i].transform.position = new Vector3(x,y - (i * offsetBetween), 0);
menuText[number,i].transform.parent = subMenuToMake.transform;
menuText[number,i].AddComponent<GUIText>();
menuText[number,i].guiText.text = niceNames[i];
menuText[number,i].guiText.alignment = TextAlignment.Center;
menuText[number,i].guiText.anchor = TextAnchor.MiddleCenter;
menuText[number,i].guiText.fontSize = fontSize;
}
subMenus [number] = new GameObject[menuToMake.Length];
}
...I'm trying to make a submenu from a different script...
public class PauseMenu : MonoBehaviour {
WholeGame game;
Menu menuScript;
public string[] options;
public string[] optionNames;
public List<GameObject> menus;
GameObject[][] subMenus;
GameObject[,] menuText;
int menu = 0;
int holdCounter;
float oneFrameAgo;
GameObject cursor;
int[] selected;
void Awake () {
menuText = new GameObject[100,100];
subMenus = new GameObject[100][]; // these two are just here 'cause they needed to be declared
game = transform.parent.GetComponent<WholeGame> ();
menuScript = GameObject.Find ("Menu Controller").GetComponent<Menu>();
menuScript.MakeSubmenuOf (options, optionNames, this.gameObject, 0, 30, 0.5f, 0.5f, 0.1f);
}
...but all I'm getting out of it is a NRE telling me that a null value was found where an object instance was required
, specifically at this line.
menuText[number,i] = new GameObject(menuToMake[i]);
It functions when I copy the code to the other script, but I wouldn't want to bloat my files with copies of the same code; would somebody manage to explain what gives?
One way for this error would be if 'menuTo$$anonymous$$ake[i]' is null. We don't see the initialization of array pass as menuTo$$anonymous$$ake, so I cannot verify.
As I've got it, menuTo$$anonymous$$ake[i]
should be options[i]
, the elements of which have been properly defined in the inspector. The line that refers to it is at the bottom of the second block of code:
menuScript.$$anonymous$$akeSubmenuOf (options, optionNames, this.gameObject, 0, 30, 0.5f, 0.5f, 0.1f);
The for
loop is made to stop exactly at the length of menuTo$$anonymous$$ake, so it couldn't be an out-of-range index.
I see you initializing menuText in the Pause$$anonymous$$enu script, but am I reading correctly that you moved the code ($$anonymous$$akeSubmenuOf()...) to a different file? Did you also make a local copy of menuText there and initialize it?
I eventually had to copy $$anonymous$$akeSubmenuOf() anyway for other reasons, but thanks for the help.
Your answer
Follow this Question
Related Questions
NullReferenceException: Object reference not set to an instance of an object 1 Answer
C# Null Reference Exception in Custom Function 1 Answer
NullReferenceException: Object Reference Not Set To An Instance Of An Object 1 Answer
NullReferenceException problem 2 Answers
Working Reference Still Throwing Null Reference Error 0 Answers