Unity에서 Tag는 게임 오브젝트를 식별하고 분류하기 위한 문자열 라벨이다. Tag를 사용하면 특정 오브젝트 그룹에 쉽게 접근하거나 필터링할 수 있다.
예를 들어, 적 오브젝트는 "Enemy" 태그를, 플레이어는 "Player" 태그를 지정하고, Enemy/Player에 해당하는 오브젝트 전체를 쉽게 접근 및 필터링이 가능하다.
Tag의 특징
- 각 게임 오브젝트는 하나의 Tag만 가질 수 있다.
- Tag는 프로젝트 설정에서 사전에 정의해야한다.
- Tag는 문자열 비교를 통해 특정 오브젝트를 식별하는 데 사용된다.
- Tag는 대소문자를 구분한다.
Tag와 관련된 주요 함수
- GameObject.CompareTag
오브젝트가 특정 태그를 가지고 있는지 확인한다.
if (gameObject.CompareTag("Enemy")) { Debug.Log("This object is an Enemy!"); }
이를 통해, 문자열 비교보다 더 빠른 접근이 가능하며, 위와 같은 로직 작성 시, 잘못된 태그를 입력하면 에러를 발생시키는 로직 디버깅이 용이하다. - GameObject.tag
오브젝트의 태그를 가져오거나 설정한다.
태그를 직접 설정할 때는 유효한 태그만 사용해야 한다. 유효하지 않은 태그를 입력하면 에러가 발생한다.// 태그 가져오기 string objectTag = gameObject.tag; // 태그 설정 gameObject.tag = "Player";
- GameObject.FindWithTag
지정된 태그를 가진 첫 번째 활성화된 게임 오브젝트를 찾는다.
비활성화 된 오브젝트는 찾을 수 없다.GameObject player = GameObject.FindWithTag("Player"); if (player != null) { Debug.Log("Player found!"); }
- 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 |