본문 바로가기

Study/Unity Engine

[Unity] Tag

Unity에서 Tag는 게임 오브젝트를 식별하고 분류하기 위한 문자열 라벨이다. Tag를 사용하면 특정 오브젝트 그룹에 쉽게 접근하거나 필터링할 수 있다.

예를 들어, 적 오브젝트는 "Enemy" 태그를, 플레이어는 "Player" 태그를 지정하고, Enemy/Player에 해당하는 오브젝트 전체를 쉽게 접근 및 필터링이 가능하다.

기본적으로 제공하는 Tag들
커스텀 태그

Tag의 특징

  • 각 게임 오브젝트는 하나의 Tag만 가질 수 있다.
  • Tag는 프로젝트 설정에서 사전에 정의해야한다.
  • Tag는 문자열 비교를 통해 특정 오브젝트를 식별하는 데 사용된다.
  • Tag는 대소문자를 구분한다.

Tag와 관련된 주요 함수

  1. GameObject.CompareTag
    오브젝트가 특정 태그를 가지고 있는지 확인한다.
    if (gameObject.CompareTag("Enemy"))
    {
        Debug.Log("This object is an Enemy!");
    }


     이를 통해, 문자열 비교보다 더 빠른 접근이 가능하며, 위와 같은 로직 작성 시, 잘못된 태그를 입력하면 에러를 발생시키는 로직 디버깅이 용이하다.

  2. GameObject.tag
    오브젝트의 태그를 가져오거나 설정한다.
    // 태그 가져오기
    string objectTag = gameObject.tag;
    
    // 태그 설정
    gameObject.tag = "Player";
     태그를 직접 설정할 때는 유효한 태그만 사용해야 한다. 유효하지 않은 태그를 입력하면 에러가 발생한다.

  3. GameObject.FindWithTag
    지정된 태그를 가진 첫 번째 활성화된 게임 오브젝트를 찾는다.
    GameObject player = GameObject.FindWithTag("Player");
    if (player != null)
    {
        Debug.Log("Player found!");
    }
    비활성화 된 오브젝트는 찾을 수 없다.

  4. GameObject.FindGameObjectsWithTag
    지정된 태그를 가진 모든 활성화된 게임 오브젝트를 배열로 반환한다.
    GameObject[] enemies = GameObject.FindGameObjectsWithTag("Enemy");
    foreach (GameObject enemy in enemies)
    {
        Debug.Log(enemy.name);
    }
    많은 오브젝트를 한 번에 검색하면 성능에 영향을 줄 수 있다.


예시코드

using UnityEngine;

public class TagExample : MonoBehaviour
{
    void Start()
    {
        // 특정 태그 확인
        if (gameObject.CompareTag("Player"))
        {
            Debug.Log("This is the player!");
        }

        // 태그를 이용해 특정 오브젝트 찾기
        GameObject enemy = GameObject.FindWithTag("Enemy");
        if (enemy != null)
        {
            Debug.Log("Enemy found: " + enemy.name);
        }

        // 특정 태그를 가진 모든 오브젝트 찾기
        GameObject[] allEnemies = GameObject.FindGameObjectsWithTag("Enemy");
        Debug.Log("Number of enemies: " + allEnemies.Length);
    }
}​

 

유의사항

  • 태그를 남발하면 관리가 어려워질 수 있으니 적절히 사용해야 한다.
  • 성능 문제를 방지하기 위해 FindWithTag와 FindGameObjectsWithTag는 최소한으로 사용하는 것이 좋다.
    대신 오브젝트 참조를 미리 저장하거나 다른 검색 방법(예: 레이어)을 병행하는 것이 효율적이다.
  • 태그 시스템이 제한적이라 복잡한 상태 관리를 위해 Layer나 Custom ScriptableObject를 활용할 수 있다.

'Study > Unity Engine' 카테고리의 다른 글

[Unity] 컴파일 과정  (0) 2025.01.18
[Unity] 오브젝트 검색 방법  (0) 2025.01.18
[Unity] ScriptableObject  (0) 2025.01.18
[Unity] Layer  (0) 2025.01.18
[Unreal] API  (0) 2024.10.20