개요
프로젝트 전반에서 캐릭터 상태, 스탠스, 행동, 입력, 무기 타입 등 다양한 “상태/속성”을 문자열이나 enum으로 하드코딩하지 않고, 계층 구조 태그(GameplayTag) 로 통합 관리할 수 있도록 태그 시스템을 구현했습니다.
언리얼의 GameplayTag 개념처럼, 데이터 기반 + 검색/필터링 가능한 공통 식별자로 사용되는 것이 목표입니다.
왜 필요한가?
상태를 enum이나 string으로 관리하면 규모가 커질수록 다음 문제가 생깁니다.
- 상태 종류가 늘 때마다 enum 수정 → 의존 코드가 연쇄 수정됨
- 문자열은 오타/중복/일관성 관리가 어려움
- “상위 개념으로 묶어서 처리”(예: State.*, Movement.*) 같은 확장이 번거로움
GameplayTag는 이를 해결하기 위해
태그를 계층 구조로 관리하고, 시스템 전반에서 동일한 방식으로 참조하도록 설계했습니다.
구성 요소
1) GameplayTag Manager(태그 관리 창)
태그를 한 곳에서 생성/편집/관리할 수 있는 에디터 창을 제공합니다.
프로젝트 전체가 공유하는 “태그 사전” 역할을 하며, 태그 추가/삭제/정리가 가능합니다.
2) GameplayTagFilter Attribute(인스펙터 필터링)
[SerializeField, GameplayTagFilter(true, "Stance")] private GameplayTag m_StanceTag;
[SerializeField, GameplayTagFilter(true, "State")] private GameplayTag m_StateTag;
- "Stance"로 필터하면 Stance.* 계열만 인스펙터에서 보이도록 제한
- "State"로 필터하면 State.* 계열만 선택 가능
즉, 데이터 입력 실수를 줄이고, 인스펙터 UX를 크게 개선합니다.
장점
- 확장성: 태그 추가가 “코드 수정”이 아니라 “태그 사전 추가”로 해결되는 경우가 많음
- 일관성: 전 시스템에서 동일한 식별 체계를 공유
- 조합/분류가 쉬움: 계층 구조로 상위 개념 처리 가능 (State.*, Movement.*)
- 에디터 안정성: GameplayTagFilter로 잘못된 태그 선택을 예방
- 데이터 드리븐 (Data Driven) 설계에 유리: 상태/조건/규칙을 데이터로 구성 가능



'유니티 > Framework' 카테고리의 다른 글
| 다형성 기반 프로퍼티 시스템 (Polymorphic Property System) (0) | 2026.02.19 |
|---|---|
| 입력 버퍼 시스템 (Input Buffer System) (0) | 2026.02.19 |
| Combat System - Document (1) | 2024.06.09 |