반응형
Unity에서 게임오브젝트를 찾는 방법은 여러 가지가 있습니다. 이 글에서는 GameObject.Find, GameObject.FindWithTag, GameObject.FindGameObjectWithTag 세 가지 메서드를 중심으로 설명하겠습니다. 이들 메서드는 오브젝트의 이름이나 태그를 기반으로 원하는 게임오브젝트를 검색하는 데 사용됩니다.
GameObject.Find
이름을 통해 게임오브젝트를 찾아 반환합니다.
GameObject player = GameObject.Find("Player");
GameObject.FindWithTag
지정된 태그를 가진 게임오브젝트를 찾아 반환합니다.
GameObject enemy = GameObject.FindWithTag("Enemy");
GameObject.FindGameObjectWithTag
지정된 태그와 이름을 가진 게임오브젝트를 찾아 반환합니다.
GameObject enemy = GameObject.FindGameObjectWithTag("Enemy");
주의사항 및 팁:
- 성능 이슈: Find와 같은 메서드들은 리플렉션을 사용하여 객체를 검색하기 때문에, 런타임 중에 빈번히 사용될 경우 성능에 영향을 줄 수 있습니다. 특히 큰 씬에서는 이러한 메서드의 사용을 최소화하는 것이 좋습니다.
- 미리 참조: 가능한 한 에디터에서 미리 참조를 연결하여 Find 메서드의 사용을 피하도록 합니다.
- 태그와 레이어 사용: 적절한 태그와 레이어를 설정하면 원하는 객체를 빠르게 찾을 수 있습니다. 그러나 태그와 레이어의 수는 제한적이므로 신중하게 사용하는 것이 중요합니다.
- 캐싱: 위 메서드들은 런타음 중에 자주 호출되면 성능 저하를 가져올 수 있기 때문에, 한 번 찾은 게임오브젝트나 컴포넌트는 변수에 저장하여 재사용합니다. 이로써 불필요한 검색을 줄이고 성능을 개선할 수 있습니다.
- Find 메서드는 오브젝트의 이름을 정확하게 알아야 합니다. 만약 이름이 바뀌게 되면 해당 메서드는 원하는 오브젝트를 찾을 수 없게 됩니다.
- 비활성화된 오브젝트 : ActiveSelf = false인 오브젝트는 위 메서드들로 해당 오브젝트를 찾을 수 없습니다.
가급적이면 사용하지 않는것이 좋습니다. 필자는 튜토리얼에서 하이라이팅할 오브젝트들이 동적 생성이 되어 개발 속도를 위해 사용하였음.
결론:
Unity에서 게임오브젝트를 효율적으로 검색하기 위해 Find, FindWithTag, FindGameObjectWithTag 메서드를 사용할 수 있습니다. 각 메서드의 특성과 사용 방법을 이해하고, 필요한 상황에 맞게 적절히 활용해보세요!
'Unity' 카테고리의 다른 글
리지드바디(Rigidbody)와 캐릭터컨트롤러(CharacterController)의 차이와 장단점 비교 (0) | 2023.10.10 |
---|---|
Unity에서 게임오브젝트를 찾는 방법 2 (0) | 2023.09.26 |
UnityEditor에서의 Reset과 OnValidate (0) | 2023.09.22 |
스크립트를 통해 게임 오브젝트에 컴포넌트 추가하기 (0) | 2023.09.21 |
Setting : Resolution and Presentation (0) | 2023.09.20 |