对象引用未设置为数组

时间:2019-06-03 13:58:52

标签: c# arrays unity3d

我正在为我的游戏制作随机对象生成系统。我遇到的错误是在将生成对象和对象分配给数组时。我这样做是为了让随机数生成器可以从数组中选择一个使用。但是我收到错误消息

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中脚本的正确部分。

3 个答案:

答案 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];