2013-02-28 3 views
1

GM이라고하는 GameObject가 있습니다. 게임에 대한 기본 논리 컨트롤러가되는 스크립트가 첨부되어 있습니다. 해당 스크립트에서 이니셜 라이저를 사용하여 객체 배열을 생성하는 것이 실패한 것 같습니다.

, 어딘가에, 내가 가진 : dbEquipment.cs에서

private dbEquipment equipment_database = new dbEquipment(); 

관련 조각 : 나는 유니티를 실행하면

public class dbEquipment { 
    private int total_items = 13; 
    private clEquipment[] _master_equipment_list; 

    public dbEquipment() { 
     _master_equipment_list = new clEquipment[total_items]; 
     _master_equipment_list[0] = new clEquipment { 
      ... //large amount of object initializing here 
     }; 
     ... //etc, for all 13 items 
    } 
} 

, 나는 수를 :

NullReferenceException: Object reference not set to an instance of an object 

줄을 가리키면 :

은 내가 먼저) 배열을 실행하고 빈 clEquipment (마다 clEquipment 객체를 초기화 시도 :

for(int x = 0; x < total_items; x++) { _master_equipment_list[x] = new clEquipment(); } 

그냥 배열이 실제로 채워진 것을 완전히 확인하기 위해,하지만 난 같은 결과를 얻었다.

나는 또한 List<clEquipment>으로 변경하고 모든 사항을 적절하게 변경하려고 노력했습니다.

아이디어가 있으십니까?

+0

"NullReferenceException"의 거의 모든 경우가 동일하다. 일부 힌트는 "[.NET의 NullReferenceException은 무엇입니까?] (http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-in-net)"를 참조하십시오. –

+0

입력 해 주셔서 감사합니다! 나는'NullReferenceException'이 무엇인지 압니다. 이 경우, 나는 이것이 "너무 단순한"사례 중 하나이기 때문에 난처한 것입니다. 그래서 누군가가 알 수있는 Unity 특유의 단점이 있을지도 모른다고 생각했습니다. – user462879

+1

그런 경우, 디버깅하는 방법과 null이 무엇인지 알아야합니다. 누군가가 [so]에 대한 답을주기 전에 디버깅을 통해 답을 찾을 수있을 것입니다. –

답변

4

내 생각에 새 clEquipment을 만들 때 //large amount of object initializing here이라는 섹션에 null 참조가 포함되었을 수 있습니다.

_master_equipment_list[0] = new clEquipment { 
    ... //check for nulls here 
}; 
+0

개체 이니셜 라이저가 어떻게 처리되었는지 오해했습니다. 지금까지는 IDE의 전체 이니셜 라이저가 IDE에 얼마나 아무리해도 실제로는 한 줄이라는 사실을 깨닫지 못하고 그 특정 줄의 오류를 지적 할 것이라고 생각했습니다. 감사! – user462879

0

clEquipment 클래스의 코드를 게시하고 싶을 수 있습니다. 모든 물건을 초기화하려고했는데 ... 그걸 브레이크 라인 전에 했니? 그것이 깨지지 않으면 좋은 징조입니다.

또한 코드에서 알기 힘들지만 초기화가 중단되는 곳에서 "()"이 필요합니까? 그냥 생각했다.

_master_equipment_list[0] = new clEquipment() { 
+1

개체 초기화 식을 수행 할 때 괄호는 필요하지 않습니다. – juharr

+0

@Jace를 읽은 후 또 다른 생각 - 생성자가 "// 여기에서 초기화되는 많은 양의 객체"에 필요한 것을 초기화하는지 확인하십시오. 생성자가 초기화 기보다 먼저 실행됩니다! – 7200rpm

+0

생성자는 개체 초기화 작업을 초기화하기 위해 어떤 것도 초기화하지 않아도됩니다. 그것이 바로 그 점입니다. null 값이 속성 중 하나를 설정하는 데 사용하는 것일 확률이 높습니다. – juharr