1일1알

Gameplay Tags 본문

언리얼/Gameplay Ability System

Gameplay Tags

영춘권의달인 2024. 6. 16. 22:59

Gameplay Tags

게임플레이 태그는 계층적으로 설계할 수 있는 Enum같은 것이고, 오브젝트의 상태를 분류하는데 유용하다. 예를들어 캐릭터가 기절했다는 상태를 설계하고 싶다면 State.Debuff.Stun 태그를 만들 수 있다. 게임플레이 태그는 GAS뿐만 아니라 다른 곳에서도 유용하게 사용될 수 있다.

에디터의 Project Settings에서 원하는 태그를 생성할 수 있고, 생성된 태그들은 DefaultGameplay.ini파일에 저장된다.

 

태그들은 GameplayTagContainer라는 별도의 저장소에서 관리되고 저장소에 특정 태그가 있는지 체계적으로 검색할 수 있다.

 

GA에 특정 태그를 부착하여 해당 GA를 대표하는 태그로 설정하면 태그를 통해 GA를 발동시킬 수 있다.

특정 태그에 대해 실행 조건을 설정할 수 있다.

 

  • AbilityTags 태그 컨테이너 : 어빌리티에 지정한 태그
  • CancelAbilitiesWithTag 태그 컨테이너 : 태그로 어빌리티 취소
  • BlockAbilitiesWithTag 태그 컨테이너 : 태그로 어빌리티 차단
  • ActivationOwnedTags 태그 컨테이너 : 어빌리티 실행 시 태그 설정 (GA가 활성화되는 동안에 이 태그 컨테이너에 들어있는 태그가 ASC에 활성화되어서 현재 어떤 상태인지 파악할 수 있다.)
  • ActivationRequiredTags 태그 컨테이너 : 태그가 있어야먄 어빌리티 실행
  • ActivationBlockedTags 태그 컨테이너 : 태그가 있으면 어빌리티 실행 차단
  • SourceRequiredTags 태그 컨테이너 : 시전자가 태그가 있어야 어빌리티 실행
  • SourceBlockedTags 태그 컨테이너 : 시전자가 태그가 있으면 어빌리티 차단
  • TargetRequiredTags 태그 컨테이너 : 시전 대상에 태그가 있어야 어빌리티 실행
  • TargetBlockedTags 태그 컨테이너 : 시전 대상에 태그가 있으면 어빌리티 차단

FGameplayTag::RequestGameplayTag(FName("태그"))를 사용해 태그를 얻어올 수 있다.

위의 태그 컨테이너들을 활용하여  GA를 상속받은 클래스에서는 AbilityTags.AddTag()로 해당 GA를 대표하는 태그를 설정하고 ActivationOwnedTags.AddTag()로 활성화될 때 ASC에 활성화 될 태그를 설정하는 등의 작업이 가능하다.

 

ASC의 HasMatchingGameplayTag()함수를 이용해 현재 ASC에 특정 태그가 동작하고 있는지 확인할 수 있다. 

 

태그를 사용해 GA를 발동시킬때는 스펙을 사용하던 TryActivateAbility이 아닌 TryActivateAbilityByTag()를 사용한다. 이 함수를 사용하게 되면 GA중에 AbilityTag에 이 태그가 있는 GA를 찾아서 발동시킨다. 인자로는 FGameplayTagContainer를 넘기도록 되어있다. ex) FGameplayTagContainer TargetTag(태그);

취소할때는 CancelAbilities(&TargetTag)

 

ASC->RegisterGameplayTagEvent(태그, EGameplayTagEventType::타입).AddUObject(this, 호출될 함수)

를 통해 태그의 변경에 따라 원하는 함수가 호출되도록 할 수 있다.

 

ASC->GenericGameplayEventCallbacks.FindOrAdd(태그).AddUObject(this, 호출될 함수)를 통해 특정 태그에 대한 이벤트를 호출시켰을 때 실행될 함수를 등록할 수 있다.

 

'언리얼 > Gameplay Ability System' 카테고리의 다른 글

Attribute  (0) 2024.07.02
Ability Task (AT)  (0) 2024.06.17
Gameplay Abilities (GA)  (0) 2024.06.16
Ability System Component (ASC)  (0) 2024.06.16
GAS (Gameplay Ability System) 개요  (1) 2024.06.16