Unity

Unity에서 게임오브젝트를 찾는 방법 1

코샵 2023. 9. 25. 11:38
반응형

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 메서드를 사용할 수 있습니다. 각 메서드의 특성과 사용 방법을 이해하고, 필요한 상황에 맞게 적절히 활용해보세요!