2016-09-11 4 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>()을 넣어 초기화해야합니다.

또한 하드 코딩 된 색인이있는 배열/목록에 액세스하고 싶지 않을 수도 있습니다. 나는 그것이 단지 예일 뿐이 었는지, 그리고 당신은 더 나은 자동적 인 방법으로 gameobject-index 쌍을 만들 수 있는지 알지 못합니다.

0

당신이 enemy[1]에 대한 값을 설정하기 전에 당신은 배열을 인스턴스화하지 않았습니다. 또한, 인덱스 enemy[0] = ... C# 배열의 인덱스가 0부터 시작하기 때문에 0이 아닌 1이어야합니다.

아래에서 인스턴스화 및 설정할 수 있습니다.

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