如何将公共字符串数组分配给私有字符串数组?

时间:2019-05-26 07:16:34

标签: c# unity3d

我正在尝试将 [SerializeField]游戏对象的私有数组复制到游戏对象的私有数组

但是它提供了空引用。

[SerializeField] private GameObject[] platformers;

private GameObject[] platformInstantiated;

private int platformCount = 0;
private int zaxis = 3;

private void Update()
{
    if(platformCount < 1)
    {
        platformInstantiated[0] = Instantiate(platformers[0], new Vector3(Random.Range(-7, 7), 0, zaxis), Quaternion.identity);
        platformInstantiated[0].transform.GetComponent<BoxCollider2D>().enabled = false;
        zaxis += 3;
        platformCount++;
    }
}

}

1 个答案:

答案 0 :(得分:0)

在分配值之前,您必须初始化数组platformInstantiated,该数组默认为null

...
platformInstantiated = new GameObject[platformers.Length];
platformInstantiated[0] = Instantiate(platformers[0], new Vector3(Random.Range(-7, 7), 0, zaxis), Quaternion.identity);
...

或者简单地使用List<GameObject>代替,您可以像这样立即初始化

private List<GameObject> platformInstantiated = new List<GameObject>();

然后您可以在需要时动态添加更多元素

platformInstantiated.Add(Instantiate(platformers[0], new Vector3(Random.Range(-7, 7), 0, zaxis), Quaternion.identity));

如果您事先知道列表的目标大小,则最好使用第一个(数组)解决方案,因为它比向List中添加元素更有效。


顺便说一句,其他数组不是这种情况

[SerializeField] private GameObject[] platformers;

是因为通过将其设置为序列化字段,它会由Inspector自身自动进行初始化,并从那里进行序列化(如果需要,可以保存为 ),而不再是null