새소식

etc

[유니티(Unity)] 하위 오브젝트 접근하는 방법, 하위 오브젝트 개수 구하기(GetChild, FindChild, childCount)

  • -

유니티를 다루면서 스크립트로 어떤 오브젝트의 하위 오브젝트를 접근해야 하는 경우가 있잖아요??
그럴때 가능한 방법이 여러가지가 있습니다!!
이번에 모두 알아보죠

예제 준비하기

빈 GameObject 만드는 단축키
ctrl + shitf + n

위 처럼 A라는 빈 object를 만들어 봅시다


그리고 scripts 폴더를 assets 폴더 밑에 만들고 scripts 폴더 안에 exam이라는 C# script를 생성하고 열어줍시다


A object를 선택하고 inspector 창에서 'Add Component'를 클릭하여 exam을 검색하여 추가해줍시다


그러면 위와 같이 선택된것을 볼 수가 있습니다.


그리고 마지막으로, 위 처럼 A object 밑에 빈 object인 B object를 만들어서 넣어줍시다.

1. transform.GetChild


public class exam : MonoBehaviour{
  GameObject child = null;
  void Start() {
      gameobject = transform.GetChild(0).gameObject; // 첫 번째 자식 object 찾기
      Debug.Log(child); // console에 출력
  }
}

첫 번째 방법은 transform.GetChild를 이용하는 방법입니다.
위에서 연 exam 파일을 위와 같이 작성해줍니다
저장을 하고 unity로 돌아가서 실행을 해주면 아래와 같이 콘솔 창에 뜨는 것을 볼 수 있습니다
child 객체의 이름이 나오네요

1.2 1번 응용

이 함수를 이용해서 A object 밑에 여러개의 object들이 있다면 모두 찾을 수 있어요
아래에 4개의 child가 있다면 for문을 이용해서 모두 찾을 수 있겠죠??
for(int i=0; i<4; i++){
    transform.GetChild(i).gameObject.SetActive(false);
}

위 처럼 순회 하면서 A의 하위의 4개의 object를 모두 비 활성화 상태로 만들 수 있어요

2. transform.FindChild(string str)


public class exam : MonoBehaviour{
  GameObject child = null;
  void Start() {
      gameobject = transform.FindChild("B"); // 이름으로 object 찾기
      Debug.Log(child);    // console에 출력
  }
}

두번째 방법은 FindChild 메소드를 이용하여 찾는 방법 입니다.
이는 이름으로 자식 오브젝트를 찾는 방법이에요
코드를 이번에는 위와 같이 작성하고 다시 실행해 보면 결과가 같은 것을 보실 수 있을거에요

3. 하위 오브젝트 개수 구하기


위의 응용에서 A object의 밑에 있는 child를 모두 비활성화 상태로 바꾸는 예제를 해봤잖아요??
그런데 child가 몇개가 있는지 모를 정도로 많다면 어떻게 해야할까요???
그럴때 사용할 수 있는 것이 바로 하위 오브젝트의 개수를 구하는 것입니다.
바로 아래와 같이 childCount속성을 이용해서 쉽게 구할 수 있어요

parent.transform.childCount

한 번 제대로 출력 되는지 해봅시다!!

    void Start(){
        Debug.Log("child 갯수 : " + this.transform.childCount);
    }

위와 같이 start()문을 작성하고 유니티로 돌아가서 실행하면 아래와 같은 걸 볼 수 있을거에요

여러가지 상황을 직접 만들어서 익숙해지고 응용력을 꼭 키워보시기 바랍니다~~

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.