본문 바로가기
C#/Unity

Unity 태그 사용법: 게임 오브젝트 효율적 관리

by GangDev 2024. 4. 17.

유니티에서 태그(Tag)는 게임 오브젝트를 식별하고 분류하는 데 사용되는 레퍼런스 단어다.

게임 오브젝트에 태그를 할당하면, 스크립팅을 통해 특정 오브젝트를 쉽게 찾고 조작할 수 있다.

예를 들어, 플레이어 캐릭터에 "Player" 태그를 붙이고, 적 캐릭터에 "Enemy" 태그를 붙이는 식으로 사용할 수 있다.

이렇게 태그를 사용하면, 스크립트에서 특정 태그를 가진 오브젝트를 찾아 조작하는 코드를 작성할 떄 효율적이다.

예를 들어, GameObject.FindWithTag("Player") 와 같은 코드를 사용하여 "Player" 태그가 붙은 오브젝트를 찾을 수 있다.

 

태그는 게임 오브젝트를 식별하고 조작하는 데 매우 유용하며, 특히 콜라이더 조작 스크립트에서 상호 작용을 판단할 때 중요한 역할을 한다.

예를 들어, 플레이어가 적, 사물 또는 수집품과 상호 작용하는지 판단하는 데 사용될 수 있다.

 

유니티에는 기본적으로 제공되는 몇 가지 내장 태그가 있다.

* Untagged : 태그가 지정되지 않은 오브젝트에 자동으로 할당된다.

* Respawn : 플레이어가 리스폰 포인트를 나타내는 오브젝트에 사용된다.

* Finish: 게임의 종료 지점을 나타내는 오브젝트에 사용된다.

* EditorOnly: 에디터 모드에서만 필요한 오브젝트에 사용된다.

* MainCamera: 메인 카메라를 나타내는 오브젝트에 사용된다.

* Player: 플레이어 캐릭터를 나타내는 오브젝트에 사용된다.

* GameController: 게임의 전반적인 로직을 관리하는 오브젝트에 사용된다.

 

태그는 게임 오브젝트 인스펙터(Inspector) 창에서 설정할 수 있다.

인스펙터 창에서 "Tag" 드롭다운 메뉴를 열고 원하는 태그를 선택하면 해당 게임 오브젝트에 태그가 적용된다.

새로운 태그를 생성하려면 "Add Tag..."를 선택하고, 태그 및 레이어 관리자에서 태그의 이름을 지정하면 된다.

단, 태그의 이름은 한 번 지정하면 변경할 수 없다.

 

예시 >>

충돌 탐지 스크립트에서 OnCollisionEnter 또는 OnCollisionEnter2D 메서드를 사용하여 충돌 이벤트를 감지하고, 충돌한 오브젝트의 태그를 확인하여 해당 오브젝트에 대한 액션을 실행할 수 있다.

 

using UnityEngine;

public class CollisionDetection : MonoBehaviour
{
    void OnCollisionEnter(Collision collision)
    {
        // 충돌한 오브젝트의 태그가 "Enemy"와 일치하는지 확인
        if (collision.gameObject.tag == "Enemy")
        {
            // 여기에 적과 충돌했을 때의 로직을 작성
            Debug.Log("적과 충돌했습니다.");
        }

        // 충돌한 오브젝트의 태그가 "Item"와 일치하는지 확인
        if (collision.gameObject.tag == "Item")
        {
            // 여기에 아이템을 충돌했을 때의 로직을 작성
            Debug.Log("아이템을 충돌했습니다.");
        }
    }
}

 

위 예시에서 OnCollisionEnter 메서드를 사용하여 충돌 이벤트를 감지하고, 충돌한 오브젝트의 태그를 확인한다.

태그가 "Enemy"인 경우, 적과 충돌했을 때의 로직을 실행하고, 태그가 "Item"인 경우, 아이템을 충돌했을 때의 로직을 실행한다.

이렇게 커스텀 태그를 사용하면, 게임 오브젝트를 효율적으로 관리하고, 특정 오브젝트와의 상호 작용을 판단하는 데 도움이 된다.

 

CompareTag 메서드를 사용하여 태그를 비교할 수도 있다.

이 메서드는 태그 이름의 오타를 방지하고, 태그가 존재하지 않을 때 오류를 발생시키는 장점이 있다.

 

void OnCollisionEnter(Collision collision)
{
    if (collision.gameObject.CompareTag("Enemy"))
    {
        Debug.Log("적과 충돌했습니다.");
    }

    if (collision.gameObject.CompareTag("Item"))
    {
        Debug.Log("아이템을 충돌했습니다.");
    }
}

 

위 예시는 태그 이름을 정확히 입력했는지 확인하고, 태그가 존재하지 않을 때 오류를 발생시킨다.

 

한 오브젝트에 여러 개의 태그를 지정할 수 있을까?

유니티에서 한 오브젝트는 단 하나의 태그만 가질 수 있다.

한 오브젝트에 여러 개의 태그를 할당하고 싶다면, 대신 레이어(Layer)를 사용하는 것을 고려해 볼 수 있다.

레이어는 유니티에서 오브젝트를 그룹화하고, 특정 프로세스나 계산에서 선택적으로 포함하거나 제외하는 데사용된다.

(카메라 렌더링, 조명, 물리 충돌 등에 적용될 수 있다)

레이어는 태그와 유사하지만, 레이어는 유니티가 오브젝트를 씬에서 어떻게 렌더링할지 정의하는 데 사용된다.

 

따라서, 한 오브젝트에 여러 개의 태그를 할당하고자 할 때는, 태그 대신 레이어를 사용하여 오븢게트를 더 세밀하게 분류하고 관리할 수 있고, 이를 통해 게임 오브젝트의 기능성을 더욱 확장하고 효율적으로 게임 개발할 수 있게 된다.