我正在为我的游戏制作随机对象生成系统。我遇到的错误是在将生成对象和对象分配给数组时。我这样做是为了让随机数生成器可以从数组中选择一个使用。但是我收到错误消息
NullReferenceException: Object reference not set to an instance of an object
RandomSpawn.Start () (at Assets/RandomSpawn.cs:26)
即将出现的区域是我的启动函数,在这里我将生成物和对象分配给它们的数组。
public Transform spawn1;
public Transform spawn2;
public Transform spawn3;
public GameObject obj1;
public GameObject obj2;
public GameObject obj3;
private Transform[] spawns;
private GameObject[] objects;
private bool[] spawnUsed;
private bool[] objectUsed;
private int randomRun = 0;
void Start()
{
spawns[0] = spawn1;
spawns[1] = spawn2;
spawns[2] = spawn3;
objects[0] = obj1;
objects[1] = obj2;
objects[2] = obj3;
}
我不确定为什么会收到错误,因为我看不到如何分配错误。这些变量与我为其分配的数组相同。我已经确保它们都已附加到Unity中脚本的正确部分。
答案 0 :(得分:6)
您需要初始化数组:
private Transform[] spawns = new Transform[3];
private GameObject[] objects = new GameObject[3];
对于UseCase,使用列表可能会更好,因为它不需要固定大小:
private List<Transform> spawns = new List<Transform>();
private List<GameObject> objects = new List<GameObject>();
void Start()
{
spawns.Add(spawn1);
spawns.Add(spawn2);
spawns.Add(spawn3);
objects.Add(obj1);
objects.Add(obj2);
objects.Add(obj3);
}
答案 1 :(得分:1)
您需要先初始化数组。 例如,在“开始”功能的开头:
spawns = new Transform[3];
与其他所有数组相同
答案 2 :(得分:0)
您需要初始化生成和对象数组,然后才能为其分配数据。
尝试
private Transform[] spawns = new Array[2];
private GameObject[] objects = new Array[2];