我正在尝试将 [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++;
}
}
}
答案 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
。