我想将预制件的几个实例实例化为一个数组,每个实例都有自己的索引号,但我不断收到错误代码"对象引用未设置为对象的实例。如何摆脱这个错误,如何销毁单个对象或检索数组中每个游戏对象的属性?
using UnityEngine;
using System.Collections;
public class SpawnEnemy : MonoBehaviour {
private GameObject[] enemy;
public GameObject enemyPrefab;
// Use this for initialization
void Start () {
enemy[1] = (GameObject)Instantiate (enemyPrefab, new Vector3 (-119, 52, 483), transform.rotation);
}
// Update is called once per frame
void Update () {
if (Input.GetButtonDown ("Fire2")) {
Destroy (enemy[1]);
}
}
}
答案 0 :(得分:1)
正如DrUsh所提到的,你需要初始化数组,例如:像这样:
void Start()
{
// initialize array with a size of 5, all elements are empty
enemy = new GameObject[5];
// now you can work with this array, e.g. like you line:
enemy[1] = (GameObject)Instantiate (enemyPrefab, new Vector3 (-119, 52, 483), transform.rotation);
}
使用数组的缺点是你将拥有固定数量的元素(在我的例子中为5)。如果您不知道存储在阵列中的最大对象的确切数量,则最好使用可以动态调整大小的List<GameObject>
。这也需要通过放置enemy = new List<GameObject>()
来初始化。
此外,您可能不希望使用硬编码索引访问数组/列表。我不知道这是否只是举例,你有一个更好的,自动的方式来创建gameobject-index对。
答案 1 :(得分:0)
在设置enemy[1]
的值之前,尚未实例化数组。此外,索引应为0,而不是1,即enemy[0] =
...因为C#数组的索引从0开始。
您可以使用以下内容进行实例化和设置。
enemy = new[]
{
(GameObject)Instantiate(enemyPrefab,
new Vector3 (-119, 52, 483), transform.rotation)
};