Unreal GAS (14) - GameplayTags

wnsduf0000·2025년 12월 1일

Unreal_GAS

목록 보기
15/34

2025 / 10 / 13

  • GameplayTags
    • FGameplayTag 구조체로 이뤄지며, GameplayTagManager에 등록됨.
    • 기본적으론 FName 타입임.
      (FGameplayTag 구조체 내의 TagName이라는 이름의 FName 타입 변수로 존재)
      • Parent.Child.GrandChild와 같은 식으로 ‘.’을 통해 구분되는 계층 구조를 지님
      • 액터나 컴포넌트에 태그를 부여할 수 있음.
      • AbilitySystemComponent는 IGameplayTagAssetInterface를 구현함.
        IGameplayTagAssetInterface는 아래 4가지의 함수를 선언하는 인터페이스임.
        • GetOwnedGameplayTags
        • HasMatchingGameplayTags
        • HasAllMatchingGameplayTags
        • HasAnyMatchingGameplayTags
      • 액터나 컴포넌트는 여러 개의 GameplayTag를 지닐 수 있는데, 이 때 이를 저장하는 컨테이너는 TArray같은 타입이 아닌, GameplayTag 전용의 FGameplayTagContainer를 사용함.
        - FGameplayTagContainer는 TagMapCount를 통해 동일한 GameplayTag도 여러 개 저장할 수 있는 것처럼 작동할 수 있음.
        TagMapCount가 0인 채로 FGameplayTagContainer에는 존재할 수 있으므로 GameplayTag 뿐만 아니라 Count도 신경써야 함.
        • 입력, Ability(GameplayAbility), Attribute, 각종 데미지 타입이나 버프/디버프, 메세지, 데이터를 표현하는 데에 광범위하게 사용될 수 있음.
    • GameplayTag 추가
      • 에디터에서 추가하기
        • 에디터의 프로젝트 세팅에서 GameplayTags를 클릭.
        • 에디터 내에서 각종 GameplayTag를 추가할 수 있으며,
          기본 경로라면 프로젝트 폴더 내에 Config/DefaultGameplayTags.ini가 생성됨.
      • DataTable로 추가하기
        • 에디터에서 GameplayTagTableRow를 상속하는 DataTable을 생성함.
        • 테이블에서 FName(GameplayTag), Comment를 포함하는 태그를 원하는 만큼 생성함.
          ’.’을 통해 태그의 계층 구조를 구분해주어야 하며, 오탈자에 매우 유의해야 함.
        • 에디터의 프로젝트 세팅에서 GameplayTagTableList에 생성한 테이블을 등록함.
    • GameplayEffect에서 GameplayTag 등록
      • GameplayEffect의 클래스 디폴트의 Tags 드롭다운에서 관리할 수 있음.
        • GameplayEffectAssetTag:
          GameplayEffect 자체가 소유하며, 다른 액터나 컴포넌트에 적용하지 않음.
        • GrantedTags:
          GameplayEffect가 적용되는 액터에게 부여되는 GameplayTag.
          GameplayEffect의 효과가 종료되면 부여된 GameplayTag도 사라짐.
          (따라서 Duration Policy가 Has Duration/Infinite인 경우에만 유의미함)
        • 각 드롭다운 항목에 대한 설명
          • Combined Tags: 부모 클래스가 존재한다면 해당 클래스에 설정된 GameplayTag를 기준으로, Added, Removed에 설정된 GameplayTag들을 종합하여 최종적으로 설정되는 GameplayTags을 보여줌. (컴파일 시 목록에 반영됨)
          • Added: 추가되는 GameplayTag들을 설정함.
          • Removed: 부모 클래스에는 존재하나, 제거하고자 하는 GameplayTag들을 설정함.
    • GameplayEffect의 Stacking과 GameplayTag의 관계
      • GameplayEffect가 스택이 가능한 경우, 효과를 여러 번 적용하여 스택이 된 경우에도 GameplayTag의 TagCount는 증가하지 않음.
      • 반대로, GameplayEffect의 Stacking Type이 None으로 설정된 경우, 지속 효과를 한 번에 여러 개 획득하는 경우, 모두 동시에 적용되므로 GameplayTag의 TagCount가 증가함.
      • 즉, GameplayTag의 TagCount는 현재 ‘동시에’ 적용되고 있는 효과의 수를 의미하며,
        Stack과 같은 방식으로 효과를 누적시키더라도 한 번에 적용되는 효과는 1개이므로 TagCount는 1로 유지되는 것임.
profile
저는 게임 개발자로 일하고 싶어요

0개의 댓글