반응형
Notice
Recent Posts
Recent Comments
Link
안 쓰던 블로그
[유니티] GetComponentsInChildren으로 자식 오브젝트 가져올 때 주의할 점 본문
반응형
다음과 같은 오브젝트를 코드에서 가져올 때에 사용하는 함수 GetComponentsInChildren 이다
GameObject answerAllBox_img = Instantiate(ans_img) as GameObject; //빈 오브젝트 생성
answerAllBox_img.transform.SetParent(canvas.transform); //오브젝트를 Canvas그룹 하위에 넣는다
for (int i = 0; i < len; i++) { //필요한 만큼 Clone 생성하는 코드
GameObject CloneImg = Instantiate(Textbackimage) as GameObject; //클론 오브젝트 생성
CloneImg.transform.SetParent(answerAllBox_img.transform); //생성한 클론을 위에서 만든 부모 오브젝트 하위에 넣는다
}
Transform[] answerTexts;
answerTexts = answerAllBox_text.GetComponentsInChildren<Transform>(); //생성한 클론들을 불러온다
위에는 Clone 오브젝트를 생성하고 부모 오브젝트를 지정하는 코드
핵심은 맨 아랫줄 2개이다.
그런데 이렇게만 가져오면 IndexOutofRange가 뜬다!!!
이 글을 쓴 이유이자 이 글의 핵심
GetComponentsInChildren 로 가져온 자식 목록은 인덱스 1번부터 시작한다는 사실!!!! (부모 오브젝트가 index=0)
함수 이름은 그냥 Children을 가져온다는 의미같지만, 사실 부모 오브젝트 자체가 Index 0번을 차지하고,
나머지 실제 자식들이 Index 1번부터 2,3,4... 이렇게 할당된다
이 사실을 몰라서 IndexOutofRange에서 한참을 헤맸다 ㅜ
그런 이유로 위의 사진과 같이 자식 오브젝트가 4개인 부모를 저 함수로 가져오면
실제로 Debug.Log(오브젝트.Length) 찍어보면 5가 출력되는 것을 알 수 있다 (부모를 포함해서 4개이므로)
반응형
'유니티 > 개발' 카테고리의 다른 글
Comments