Figured it out
Why cant I instantiate????
So I'm trying to set up a random spawn, in 351 in the morning and i get this error : NullReferenceException: Object reference not set to an instance of an object. And before you ask, there is nothing wrong with the vector 3 Here is my problem code:`
First of all, if you use Random.Range with an int, the max number will be exclusive, so you have to write
chosenSpawn = Random.Range(0, spawners.Length);
You can paste code in your post with the 101010 button, ins$$anonymous$$d of using a cropped screenshot.
Did you insert Debug.log lines to see which spawner was chosen?
I wast it to be one less than the length so that is not an option
well, what should be wrong with Vector3 ? you've got a Null Reference Exception(what is it?)(how to fix it) a Vector3 is a struct and can't be null. the only thing in your code snipped who can be null is Zombie
. which is exactly the part you have not shown in your screenshot.
edit: don't listen to the answers. Debug.Log()-debugging is stupid, and will not realy work with more complex programms. Learn how to debug your code: here
edit 2: since you have not shown in which line the error appeard, and you have excluded the line numbers from your code snipped, it could be that zSone or zStwo are null.
Sorry, heres my error: NullReferenceException: Object reference not set to an instance of an object $$anonymous$$asterScript.spawnZomb () (at Assets/Scripts/$$anonymous$$asterScript.cs:28) $$anonymous$$asterScript.Update () (at Assets/Scripts/$$anonymous$$asterScript.cs:67)
And thanks, the code is: using UnityEngine; using System.Collections;
public class $$anonymous$$asterScript : $$anonymous$$onoBehaviour {
public GameObject zSOne;
public GameObject zSTwo;
public GameObject Zombie;
private int ZomsSpawned = 0;
private int chosenSpawn;
private int numberZombsPR = 1;
private int numberZombsLeft = 1;
private int currentRound = 1;
private int points = 0;
private GameObject[] spawners;
// Use this for initialization
void Start () {
currentRound = 1;
numberZombsLeft = numberZombsPR;
}
public void setSpawns(){
spawners = new GameObject[] {zSOne, zSTwo};
}
public void spawnZomb() {
chosenSpawn = Random.Range (0, spawners.Length - 1);
Debug.Log (chosenSpawn);
Debug.Log (Zombie);
Vector3 spawner = new Vector3 (spawners[chosenSpawn].transform.position.x, spawners[chosenSpawn].transform.position.y, spawners[chosenSpawn].transform.position.z);
Instantiate (Zombie, spawner, Quaternion.identity);
ZomsSpawned += 1;
}
public int getCurrentRound () {
return currentRound;
}
public void addPoints(int pointsGained) {
points += pointsGained;
}
public int getZTR() {
return numberZombsLeft;
}
public int calculateZombiesPR () {
numberZombsPR = currentRound;
return numberZombsPR;
}
public void changeRound() {
currentRound += 1;
numberZombsLeft = numberZombsPR;
ZomsSpawned = 0;
}
public int killZom() {
return numberZombsLeft -= 1;
}
// Update is called once per frame
void Update () {
if (ZomsSpawned < numberZombsPR) {
spawnZomb ();
}
if (numberZombsLeft == 0) {
changeRound ();
}
}
void OnGUI() {
GUI.Box (new Rect(20, 20, 100, 20 ), currentRound.ToString());
GUI.Box (new Rect(Screen.width - 100, Screen.height - 20, 100, 20 ), points.ToString());
GUI.Box (new Rect(0, Screen.height - 20, 100, 20 ), numberZombsPR.ToString());
}
}
Answer by Blue-Cut · Apr 23, 2016 at 11:19 AM
One of your object is null, so what you need to do is just put some Debug.Log() to find which one it is. You say it's not the Vector3, what about the Zombie transform ?
Which line has a problem, is it the instantiation or is it later ?
Debug.Log(spawners);
Debug.Log(zSOne);
Debug.Log(zSTwo);
chosenSpawn = Random.Range(0, spawners.Length-1);
Vector3 spawner = ; //your code
Debug.Log(spawner);
Debug.Log(Zombie);
Instantiate (Zombie, spawner, Quaternion.identity);
Answer by Misthra-Games · Apr 23, 2016 at 06:35 PM
Sorry, here's my code and the full error was : NullReferenceException: Object reference not set to an instance of an object MasterScript.spawnZomb () (at Assets/Scripts/MasterScript.cs:28) MasterScript.Update () (at Assets/Scripts/MasterScript.cs:67)
using UnityEngine;
using System.Collections;
public class MasterScript : MonoBehaviour {
public GameObject zSOne;
public GameObject zSTwo;
public GameObject Zombie;
private int ZomsSpawned = 0;
private int chosenSpawn;
private int numberZombsPR = 1;
private int numberZombsLeft = 1;
private int currentRound = 1;
private int points = 0;
private GameObject[] spawners;
// Use this for initialization
void Start () {
currentRound = 1;
numberZombsLeft = numberZombsPR;
}
public void setSpawns(){
spawners = new GameObject[] {zSOne, zSTwo};
}
public void spawnZomb() {
chosenSpawn = Random.Range (0, spawners.Length - 1);
Debug.Log (chosenSpawn);
Debug.Log (Zombie);
Vector3 spawner = new Vector3 (spawners[chosenSpawn].transform.position.x, spawners[chosenSpawn].transform.position.y, spawners[chosenSpawn].transform.position.z);
Instantiate (Zombie, spawner, Quaternion.identity);
ZomsSpawned += 1;
}
public int getCurrentRound () {
return currentRound;
}
public void addPoints(int pointsGained) {
points += pointsGained;
}
public int getZTR() {
return numberZombsLeft;
}
public int calculateZombiesPR () {
numberZombsPR = currentRound;
return numberZombsPR;
}
public void changeRound() {
currentRound += 1;
numberZombsLeft = numberZombsPR;
ZomsSpawned = 0;
}
public int killZom() {
return numberZombsLeft -= 1;
}
// Update is called once per frame
void Update () {
if (ZomsSpawned < numberZombsPR) {
spawnZomb ();
}
if (numberZombsLeft == 0) {
changeRound ();
}
}
void OnGUI() {
GUI.Box (new Rect(20, 20, 100, 20 ), currentRound.ToString());
GUI.Box (new Rect(Screen.width - 100, Screen.height - 20, 100, 20 ), points.ToString());
GUI.Box (new Rect(0, Screen.height - 20, 100, 20 ), numberZombsPR.ToString());
}
}
Follow this Question
Related Questions
Instantiation Problem 0 Answers
SetParent after Instantiate. NullReferenceException error 1 Answer
NullRefrenceException - Cant find the cost 1 Answer
Instantiation of my GameObjects spell (from other script) 0 Answers
NullReferenceException 0 Answers