GameplayTag를 C++ Native Tag로 만드는 방법은 두가지이다.
UE_DECLARE_GAMEPLAY_TAG_EXTERN+UE_DEFINE_GAMEPLAY_TAGUE_DEFINE_GAMEPLAY_TAG_STATIC
→ 여러 cpp에서 같은 GameplayTag를 써야 한다
이 경우는 EXTERN 방식이 맞음
→ 특정 cpp 안에서만 쓴다
이 경우는 STATIC 방식이 맞음
- 같은 모듈 내부의 특정 cpp에서만 쓰는 tag :
STATIC- 대신
namespace를 통해redefined컴파일 에러를 막아야함.
- 대신
- 모듈 밖에서도 써야하는 tag :
EXTERN
같은 모듈에서 Extern 두고 사용할 경우
// LyraGameplayTags.h
namespace LyraGameplayTags
{
UE_DECLARE_GAMEPLAY_TAG_EXTERN(Ability_ActivateFail_IsDead);
UE_DECLARE_GAMEPLAY_TAG_EXTERN(Ability_ActivateFail_Cooldown);
UE_DECLARE_GAMEPLAY_TAG_EXTERN(InputTag_Move);
UE_DECLARE_GAMEPLAY_TAG_EXTERN(InputTag_Jump);
UE_DECLARE_GAMEPLAY_TAG_EXTERN(Status_Death);
UE_DECLARE_GAMEPLAY_TAG_EXTERN(Status_Crouching);
// ...
}이 헤더를 cpp가 #include하면, 헤더 변경 시 cpp들이 다시 컴파일 해야한다.
재 컴파일 범위가 늘어남
STATIC으로 하게 되면 컴파일 의존성이 감소한다.
그럼 Static으로 전부다?
Lyra에서는 전부 UE_DEFINE_GAMEPLAY_TAG_STATIC으로 두고 사용하고 있다.
하지만 이 방식의 문제점은 번거롭다는 점이다.
같은 태그를 어디서 정의했는지 찾기 어려움
namespace FTWeaponTags
{
UE_DEFINE_GAMEPLAY_TAG_STATIC(TAG_Weapon_Rifle, "Weapon.Rifle");
}namespace FTUITags
{
UE_DEFINE_GAMEPLAY_TAG_STATIC(TAG_Weapon_Rifle, "Weapon.Rifle");
}태그 문자열 리네이밍이 불편함
namespace를 통해 같은 tag로 다른 cpp에 만들어져 있으니
문자열이 바뀌면 전부다 찾아서 직접 바꿔줘야 한다.
namespace 작명이 겹치면 안됨
말 그대로 namespace로 구분하고 있기 때문에 겹치기라도 하면 redefined 컴파일 에러가 발생한다.
사용 추천
EXTERN으로 사용하지만tag를 기능 단위로 분리해 다른 헤더에 담아 재 컴파일 범위를 줄이기.- (
namespace+STATIC) +EXTERN혼용하기. 공용 tag만EXTERN으로 승격
반응형
'Unreal Engine' 카테고리의 다른 글
| UE Input 2 (0) | 2026.06.24 |
|---|---|
| UE Input 1 (0) | 2026.06.23 |
| AssetManager (0) | 2026.06.19 |
| UE Game play Framework 2 (0) | 2026.06.18 |
| UE Game play Framework 1 (0) | 2026.06.17 |