[유니티] UnityException: Transform child out of bounds

양규빈·2023년 9월 22일
0

디버깅

목록 보기
2/6

버그 발생



첫 번째 가정

무기 정보 창_업그레이드 파트 부분의 기능 및 UI를 구현하던 도중 이러한 에러가 발생했었습니다.

'Transform child out'라는 문구를 보면 유추할 수 있다시피,
오브젝트의 트랜스폼을 부모 오브젝트의 범위를 벗어나게 설정하려고 할 때 발생하는 에러였습니다.

위 객체는 ObjectPooling 기법을 이용하여 관리되는 UI 컴포넌트 객체였으며, SetActive(true)와 (false)를 오고가며, 객체 자원을 관리하는 오브젝트였습니다.

그렇기에 저는 SetActive(false) 상태에서 객체에 접근하려했기에, 위 오류가 발생했을 것으로 생각하고 코드의 논리적인 오류를 찾고자 노력했었습니다만, 코드 상에는 문제가 없었습니다.



두 번째 노력

다음은 비주얼 스튜디오로 직접 중단포인트를 걸어서 디버깅을 해보았습니다.

위와 같이, Top 오브젝트에 gameObject가 걸려있는 것을 확인할 수 있었습니다.
하지만, 오브젝트 풀로 관리되는 SelectButton 오브젝트는, 최초 씬 로드 시에 TopCanvas에 해당 객체가 존재해서는 안 되기 때문에, 이 부분에 오류가 있을 거라고 판단했습니다.

SelectButton 객체는 Object 풀 객체를 보관하는 특정 컴포넌트의 자식 객체로 소속되기 때문입니다.

그리고, 무기 정보 창_돌파 부분에, 해당 객체를 컴포넌트로서 설정해두었음을 떠올린, 저는 곧장 해당 객체의 위치 포인트만 저장한 빈게임오브젝트로 Swap하여 객체를 제거했습니다.

하지만, 오류는 여전했습니다.



해결

다시 처음으로 돌아가,
UnityException: Transform child out of bounds라는 에러 문구에 집중했습니다.
트랜스폼이 오브젝트의 범위를 벗어나지 않도록 다시 한 번 확인했습니다.

꼼꼼히, 객체를 살펴본 결과 객체를 제어하는 클래스 스크립트가 중복되어 있음을 확인할 수 있었습니다.

부모객체인 SelectButton이 아닌, Top 컴포넌트의 SelectButtonScript를 제거하는 것으로 에러를 해결할 수 있었습니다.

profile
훌륭한 개발자를 꿈꾸는 중입니다

0개의 댓글