본문 바로가기
프로그래밍/유니티

[Unity C#] 오브젝트의 부모, 자식을 참조하는 법

by 김시루시루르 2021. 7. 9.

여러개 있지만 제가 자주 쓰는 것 위주로 정리할것입니다. (내가 쓰는거니까)

해당 스크립트가 붙어있는 오브젝트의 부모 오브젝트, 자식 오브젝트,

혹은 그 오브젝트들의 컴포넌트에 접근하는 방법입니다~


1. 부모 오브젝트를 참조하는 법

1
2
transform.parent //부모의 트랜스폼을 참조
transform.GetComponentInParent //부모가 가진 컴포넌트를 참조
cs

여기선 부모가 하나의 오브젝트이기때문에 s 없이 parent입니다 (?)

GetComponentInParent를 하면 뒤에 <참조할 컴포넌트>를 쓰는 것으로 바로 컴포넌트 참조 가능.

parent의 경우 부모의 트랜스폼을 바로 참조할 수 있어서 선택적으로 사용하시면 됩니다.

parent를 쓴 뒤에 GetComponent<>를 사용하는 방법도 있어요.


2. 자식 오브젝트를 참조하는 법

1
2
transform.GetChild(인덱스번호//트랜스폼 참조
transform.GetComponentInChildren //자식 오브젝트들의 컴포넌트 참조
cs

여기서는 Child와 Children의 차이도 있습니다 (이래서 영어를 잘 해야한다는걸까)

GetComponentInChildren의 경우, 이 오브젝트의 자식들에서 입력한 컴포넌트를 가진 녀석들을 전부 찾아냅니다.

하나하나 검문한다는 느낌? 그런데 return 해주는 건 제일 먼저 찾는 녀석 하나뿐이더라고요 (??)

심지어 찾는 컴포넌트를 이 오브젝트가 갖고있을 경우, 이 오브젝트에서 반환합니다.

 

하나하나 찾는 것의 비효율과 발생할 사고를 방지하기 위해 추천드리는 (제가 애용합니다)

GetChild

이건 인덱스 번호로 빠르고 정확하게 접근할 수 있습니다.
부모 오브젝트의 바로 아래에 있는게 0번이고, 1씩 더해지는 식.

레테-Lethe 하이러키 슬쩍

가령 이런 식일 경우, Cube_Move에서 GetChild(0)을 하면 Quad(1)을 불러올 수 있습니다.

이 상태에서 GetComponent<>를 하면 Quad(1)에 있는 컴포넌트를 참조할 수 있는거죠.

다만 이 상태에서 자식은 쿼드1~6, 튜토리얼 쿼드까지 해서 총 7개이기 때문에,

인덱스에서 벗어난 번호인 7로 GetChild(7)을 하면 에러가 발생합니다. 인덱스 에러!

또, 하이러키에서 자식 오브젝트의 순서를 변경할 경우 입력한 인덱스 번호도 수정해줘야 하기 때문에

이것들을 주의하며 사용하도록 합시다.

댓글