안 쓰던 블로그

[유니티] GetComponentsInChildren으로 자식 오브젝트 가져올 때 주의할 점 본문

유니티/개발

[유니티] GetComponentsInChildren으로 자식 오브젝트 가져올 때 주의할 점

proqk 2024. 4. 30. 00:03
반응형

 

다음과 같은 오브젝트를 코드에서 가져올 때에 사용하는 함수 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