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:`
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);
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());
}
}