从数组中实例化和销毁GameObject



我想实例化预制的几个实例到一个数组中,每个数组都有自己的索引号,但我一直得到错误代码"对象引用未设置为对象的实例。我如何才能摆脱这个错误,我如何才能销毁单个对象或检索数组中每个单个游戏对象的属性?

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]);
    }
   }
}

正如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对。

设置enemy[1]的值之前没有实例化数组。同时,指数应该是0,而不是1,即enemy[0] =…因为c#数组的索引从0开始

您可以使用下面的实例化和设置。

enemy = new[]
{
    (GameObject)Instantiate(enemyPrefab,
        new Vector3 (-119, 52, 483), transform.rotation)
};

最新更新