Unity 오브젝트들을 찾기 위한 방법 (Find Objects)

Unity 오브젝트들을 찾기 위한 방법 (Find Objects)


단 하나인 오브젝트에 접근하는 법은 여러가지가 있고 방법 자체도 쉬운편인거 같은데
오브젝트'들' 에 접근하는 방법은 제약이 좀 있는 느낌이였기 때문에 정리해 보았음


GameObject.FindGameObjectsWithTag


    GameObject[] itemList = GameObject.FindGameObjectsWithTag("TileItem");     
    for (int i = 0; i < itemList.Length; i++) {
    BaseItem item = itemList[i].GetComponent<BaseItem>();
    //...
    }


  • 미리 지정한 Tag 를 사용해서 같은 Tag 를 가진 객체들을 가져옴
  • 비활성화된 객체에 접근이 안된다고 한다
  • 배열이 null 인 경우가 있을 수 있어서 예외처리 필요함



Resources.FindObjectsOfTypeAll 또는 Object.FindObjectsOfType


    BaseItem[] itemList = Resources.FindObjectsOfTypeAll<BaseItem>();
    for (int i = 0; i < itemList.Length; i++) {
    BaseItem item = itemList[i];
        //...
    }


  • 클래스 타잎으로 객체들을 가져옴.
  • FindObjectsOfTypeAll 모든유형의 비활성화 된 객체도 가져옴
  • FindObjectsOfType 에셋 제외, 비활성화 객체 제외 하고 가져옴
  • 둘다 성능 이슈가 있어서(매우 느리다고 되어있음) 매 프레임 호출은 좋지 않다
  • 싱글톤 패턴같은 디자인 패턴이나 다른 방법으로 대체하기를 권장




다른 방법으로 대체해서 구현하는 방법 같은 경우는 구글링하면 찾을 수 있을 듯...

비활성화 된 객체에 접근하지 않기는 경우는 1번 방법이 제일 나은 하다


댓글

이 블로그의 인기 게시물

Aseprite 스프라이트 슬라이스해서 개별로 저장 하는방법 ( How to save sprite split in Aseprite )

Unity Google Play Games Services 연동 오류로 인한 삽질 기록

Unity3D 에서 당신의 Pixel Art 게임을 Pixel Perfect 하게 만들기