본문 바로가기
알아두면 좋은것들

03.07 (TIL)

by 오랑이귀엽다 2024. 3. 7.

Unity에서 레이어와 태그의 역할 및 사용 방법

Unity에서 레이어와 태그는 게임 오브젝트를 분류하고 구별하는 데 사용됩니다. 이러한 분류는 오브젝트 관리, 상호작용, 검색을 용이하게 하며, 특정 기능을 적용할 대상을 선별하는 데 도움을 줍니다.

  • 태그(Tags): 태그는 오브젝트를 간단하게 식별하기 위한 문자열 레이블입니다. 예를 들어, "Player", "Enemy", "Collectible"과 같이 오브젝트의 용도나 유형을 나타내는 태그를 지정할 수 있습니다. 스크립트 내에서 GameObject.FindGameObjectWithTag("Player")와 같은 함수를 사용하여 특정 태그를 가진 오브젝트를 찾을 수 있습니다.
  • 레이어(Layers): 레이어는 오브젝트를 여러 그룹으로 나누어 관리하고, 렌더링, 물리 계산, 레이캐스팅 등에서 특정 그룹의 오브젝트에 대해 다르게 처리하고자 할 때 사용됩니다. 예를 들어, 적 오브젝트를 별도의 레이어에 할당하여, 플레이어의 공격이 해당 레이어의 오브젝트에만 영향을 주도록 설정할 수 있습니다. 레이어를 통해 카메라가 특정 레이어의 오브젝트만 렌더링하도록 하거나, 물리 충돌 검사에서 특정 레이어를 무시하도록 설정할 수 있습니다.

Find 함수 사용을 자제해야 하는 이유

Find 함수와 관련 메소드(FindGameObjectWithTag, FindObjectsOfType 등)는 유용해 보일 수 있지만, 성능상의 이유로 남용을 피해야 합니다. 주된 이유는 다음과 같습니다

  • 성능 저하: Find 함수들은 호출될 때마다 씬 내의 모든 오브젝트를 검사합니다. 이는 특히 많은 수의 게임 오브젝트가 존재하는 씬에서 상당한 성능 저하를 일으킬 수 있습니다. 게임의 프레임레이트에 부정적인 영향을 미칠 수 있으며, 게임의 반응성을 저하시킬 수 있습니다.
  • 유지보수 문제: 하드코딩된 문자열(예: 태그 이름)을 사용하는 경우, 태그명이 변경되었을 때 관련된 모든 Find 호출을 찾아 수정해야 하는 유지보수 문제가 발생할 수 있습니다.

대안:

  • 참조를 인스펙터에서 할당: 가능한 경우, Unity 에디터에서 스크립트의 public 또는 [SerializeField]로 선언된 변수에 직접 오브젝트를 드래그하여 참조를 할당하는 방법을 사용합니다.
  • 시작 시 참조 캐싱: 게임 시작 시 한 번만 Find 함수를 호출하여 필요한 오브젝트의 참조를 얻고, 이를 변수에 저장하여 사용합니다.
  • 이벤트 시스템 사용: 오브젝트 간의 참조가 필요한 경우, 이벤트와 델리게이트를 사용하여 느슨한 결합을 유지하며 필요한 오브젝트를 찾을 수 있도록 합니다.

'알아두면 좋은것들' 카테고리의 다른 글

03.11 (TIL)  (0) 2024.03.12
03.08 (TIL)  (1) 2024.03.08
03.06 (TIL)  (0) 2024.03.07
03.05 (TIL)  (1) 2024.03.05
03.04 (TIL)  (0) 2024.03.05