Unity

[Unity] 자식 객체 가져오는 방법 두 가지

Guk-blog 2022. 3. 29. 16:34
728x90
반응형

이번엔 자식 오브젝트를 가져오는 방법 두 가지를 알아봅시다

먼저 세팅은 아래와 같습니다

하이어라키에 더미 오브젝트를 나열했고 스크립트 FindMyChild를 생성해 부모 객체를 연결해주었습니다
 

1. 부모 객체에서부터 순서대로 가져오는 방법

using UnityEngine;

public class FindMyChild : MonoBehaviour
{
    [SerializeField] Transform targetParent;
    void Start()
    {
        //Use Child Component
        Debug.Log("TargetParent Child Length : " + targetParent.childCount);
        for (int i = 0; i < targetParent.childCount; i++)
        {
            Debug.Log(targetParent.GetChild(i).name);
        }
    }
}

결과물

Transform 컴포넌트의 GetChild()와 childCount를 이용한 방법입니다.
부모객체.childCount로 자식 객체의 수를 알아내고 원하는 순서에 있는 인덱스(0~{자식 객체의 수-1})를 입력하면
해당하는 자식 객체를 불러옵니다
EX) 세 번째 자식 객체를 가져오고 싶다면 부모객체.GetChild(2)를 해주면 됩니다.
 

2. 컴포넌트를 검색하는 방법

코드

using UnityEngine;

public class FindMyChild : MonoBehaviour
{
    [SerializeField] Transform targetParent;
    void Start()
    {
        //Use Collider
        var childCols = targetParent.GetComponentsInChildren<Collider>();
        Debug.Log("ChildCollider Length : " + childCols.Length);
        foreach (var col in childCols)
        {
            Debug.Log(col.name);
        }
    }
}

결과물

GetComponentsInChildren<T>()함수를 이용하여 Collider가 붙어있는 자식 객체를 모두 불러오는 방법입니다.

자식 객체에 모두 Collider 컴포넌트가 붙어 있으므로 자식 객체의 수는 모두 4로 출력되었고
이름도 위와 동일하게 출력되었습니다.
EX) SphereCollider만 검색했다면 Sphere라는 자식 객체만 호출하게 되고 자식 객체의 수는 1로 출력됩니다.
GetComponet는 Find보다 덜 부담스럽지만 매 프레임마다 호출하면 좋지 않기에 Awake, Trigger/Collsion Enter 시에만 확인하는 방법이 좋다고 하네요

728x90
반응형