1. 게임플레이 태그

게임플레이 태그는 하나의 라벨이다.
도서관에서 도서 태그를 보면 어떤 장르의 책인지 유추할 수 있다. (800:문학, 900:역사)
액터도 게임플레이 태그가 있다면 형변환을 하지 않아도
어떤 타입의 액터인지(무기, 갑옷, 포션...) 쉽게 유추할 수있다.
언리얼 엔진에서는 Enum이나 Bool을 통해 분기 처리를 할 수 있는데
게임플레이 태그를 사용해야 하는 이유는 무엇일까?
게임플레이 태그는 복잡한 분기 처리가 가능하다.

Bool은 True 또는 False 값에 따라 2가지로 분기할 수 있다.

Enum은 하나의 범주(ItemType) 내에서 여러 가지 분기가 가능하다.

게임플레이 태그는
여러 범주 내에서의 여러 가지 분기 처리가 가능하다.
"Item.Equpable.Weapon"
- Item (아이템인가?)
- Item.Equpable (장착 아이템인가?)
- Weapon (무기인가?)
"Item.Consumable.Potion"
- Item.Consumable (소비형 아이템인가?)
- Potion (포션인가?)
하나의 태그로 다양한 분기가 가능하며
형변환을 하지 않아도 액터가 어떤 타입인지 알 수 있어 클래스 간에 의존성을 낮출 수 있다.
2. 게임플레이 태그 추가

직접 태그를 추가할 수 있다.
Edit > Project Settings > Project > GameplayTags에서
GamePlay Tag List > Manage Gmaplay Tags를 누르고 플러스(+) 버튼을 눌러 추가할 수 있다.

그리고 데이터 테이플 통해서도 추가할 수 있다.
데이터 테이블을 GameplayTagTableRow로 생성해준다.

그리고 Tag 컬럼에 원하는 태그를 추가해준 뒤

위 셋팅에서 데이터 테이블을 추가할 수 있다.
3. 액터에 게임플레이 태그 설정
Source/LyraGame/AbilitySystem/LyraTaggedActor.h · b3f023ca31bff524a13783523a1df660535f6917 · WVS-Project-Examples / LyraStarte
Lyra Starter Game is an example project on WVS that was created by Epic Games as a sample game used to help you understand the frameworks of Unreal...
wvs.io
C++에서 액터에 게임플레이 태그를 설정하는 방법은 Lyra 코드를 참고하였다.
#include "CoreMinimal.h"
#include "GameplayTagAssetInterface.h"
#include "GameplayTagContainer.h"
#include "ItemBase.generated.h"
UCLASS()
class SKYRIM_API AItemBase : public AActor, public IGameplayTagAssetInterface
{
GENERATED_BODY()
public:
//~IGameplayTagAssetInterface
virtual void GetOwnedGameplayTags(FGameplayTagContainer& TagContainer) const override {
TagContainer.Append(StaticGameplayTags);
}
//~End of IGameplayTagAssetInterface
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "GameplayTags")
FGameplayTagContainer StaticGameplayTags;
...
}
- IGameplayTagAssetInterface 인터페이스를 구현한다.
- virtual void GetOwnedGameplayTags(FGameplayTagContainer& TagContainer) const override; 가상함수를 오버라이드 한다.
- FGameplayTagContainer 컨테이너를 선언해준다.

그리고 블루프린트의 Detail 창에서 이전에 추가해준 태그들을 하나씩 설정해준다.
4. 게임플레이 태그 연산
액터에 설정한 게임플레이 태그들은
다양한 함수를 통해 분기 처리를 할 수 있다.
자세한 내용은 공식 사이트에 자세히 설명되어 있다. (링크)
IGameplayTagAssetInterface* GameplayTagInterface = Cast<IGameplayTagAssetInterface>(Item);
if (GameplayTagInterface == nullptr)
return;
// 액터의 태그 정보를 컨테이너로 가져온다.
FGameplayTagContainer GameplayTags;
GameplayTagInterface->GetOwnedGameplayTags(GameplayTags);
// 액터에 설정된 태그들을 순회할 수 있다.
for (FGameplayTag Tag : GameplayTags.GetGameplayTagArray())
{
// MatchesTag : 일부 같은 태그인지 확인한다.
if (Tag.MatchesTag(FGameplayTag::RequestGameplayTag(FName("Item.Equipable"))))
{
...
}
else if (Tag.MatchesTag(FGameplayTag::RequestGameplayTag(FName("Item.Consumable"))))
{
...
}
}'Unrael' 카테고리의 다른 글
| [Animation] 걷기 / 뛰기 (Walk / Sprint) (0) | 2025.04.23 |
|---|---|
| [Animation] 웅크려 이동하기 (Crouching) (0) | 2025.04.22 |
| [UE/Implement] 총기 격발 및 재장전 시스템 구현 (C++ & 블루프린트) (0) | 2025.02.20 |
| [UE/Settings] 언리얼 에디터 기본 설정 (0) | 2025.02.19 |
| [UE/Tools] 스태틱 메시를 스켈레탈 메시로 (1) | 2025.02.18 |