2016-09-11 10 views
-1

配列のインスタンスをそれぞれ独自のインデックス番号でインスタンス化したいが、エラーコード "オブジェクト参照がオブジェクトのインスタンスに設定されていない。このエラーを取り除くと、私は個々のオブジェクトを破壊したり、アレイ内の個々のゲームオブジェクトのプロパティを取得することができますか?配列から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]); 
    } 

    } 
} 

答えて

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>()と入力して初期化する必要があります。

また、ハードコードされたインデックスを持つ配列/リストにアクセスすることは望ましくありません。私はそれが単なる例であるかどうかわかりませんが、あなたはより良い自動化された方法でゲームオブジェクトとインデックスのペアを作成できます。

0

あなたはenemy[1]の値を設定する前に、配列をインスタンス化していない。また、インデックスenemy[0] = ... C#配列のインデックスが0から始まるため、

以下のようにインスタンス化して設定することができます。

enemy = new[] 
{ 
    (GameObject)Instantiate(enemyPrefab, 
     new Vector3 (-119, 52, 483), transform.rotation) 
}; 
関連する問題