- 개요
GameplayTag와 GameplayEffect는 밀접한 관계가 있다
특정한 GameplayTag를 가진 대상에게만 GameplayEffect를 적용할 수 있게끔 설계가 가능하고
GameplayEffect가 적용된 대상에게 특정한 GameplayTag를 부여할 수 있다
또는 특정한 GameplayTag를 가진 GameplayEffect만이 적용될 수 있도록 설계할 수 있다
간단하게 GameplayEffect가 적용 대상에게 GameplayTag를 부여하는 방법과
GameplayEffect에 GameplayTag를 부여하는 방법을 알아본다
1) GameplayEffect가 GameplayTag를 부여

GameplayEffect가 적용 대상에게 GameplayTag를 부여하기 위해서는
Components 설정에서 Grant Tags to Target Actor를 설정해야 한다
선택한 Tag를 GE의 적용 대상에게 부여하는데, 이 설정은 Duration GameplayEffect에서만 사용가능하다
또한 Stacking되는 GameplayEffect의 경우, 부여되는 GameplayTag는 중첩되지 않지만,
Stacking되지 않는 GameplayEffect의 경우, 부여되는 GameplayTag는 중첩된다
따라서 전자의 경우 Tag는 하나만 부여되지만, 후자의 경우 Tag는 적용된 동일한 GE의 수만큼 부여된다
2) GameplayEffect에 GameplayTag를 부여

GameplayEffect에 GameplayTag를 부여하기 위해서는 1)과 동일하게 Components 설정을 조정해야 한다
설정값을 Tags This Effect Has로 설정하고 해당 GE가 가질 GameplayTag를 결정한다
3) 적용된 GameplayEffect로부터 GameplayTag 가져오기
GameplayEffect에 위와 같이 GameplayTag와 관련한 설정하였으므로 실제 GE로부터 GameplayTag를 가져온다
3 - 1) AuraAbilitySystemComponent 클래스

현재 GameplayEffect를 적용하는 주체는 ASC이므로, ASC에서 관련 작업을 수행한다
멀티캐스트 델리게이트 EffectAssetTags를 추가하고, 인자로 GameplayTagContainer를 받도록 설정한다

AbilityActorInfoSet 함수를 추가하여 Avatar Actor와 Owner Actor가 설정된 후에
ASC의 OnGameplayEffectAppliedDelegateToSelf 델리게이트에 콜백 함수를 바인드한다
해당 델리게이트는 GE가 적용된 후에 바인드된 콜백 함수를 호출한다

이어서 새로 생성한 EffectAssetTags 델리게이트를 프로퍼티로 추가한다

ClientEffectApplied 함수를 추가하여 적용된 GameplayEffect로부터 Tag를 가져오고
EffectAssetTags 델리게이트를 통해 가져온 GameplayTagContainer를 전파한다
Client 속성과 Reliable 속성을 사용하여 함수가 클라이언트에서 실행되도록 설정한다

AbilityActorInfoSet 함수의 로직은 위와 같다
OnGameplayEffectAppliedDelegateToSelf 델리게이트에 ClientEffectApplied 함수를 바인드한다

ClientEffectApplied 함수의 로직은 위와 같다
적용된 GameplayEffectSpec으로부터 모든 GameplayTag를 가져오고 EffectAssetTags를 통해 브로드캐스트한다
3 - 2) AuraCharacter 클래스

InitAbilityActorInfo 함수에서 ASC를 가져오고 AbilityActorInfoSet 함수를 호출하도록 수정한다
따라서 플레이어에게 GE가 적용된 후에 GE의 GameplayTag를 브로드캐스트한다
3 - 3) AuraEnemy 클래스

InitAbilityActorInfo 함수에서 ASC를 가져오고 AbilityActorInfoSet 함수를 호출하도록 수정한다
따라서 적에게 GE가 적용된 후에 GE의 GameplayTag를 브로드캐스트한다
3 - 4) OverlayWidgetController 클래스

Model의 변경 사항에 따라 로직을 수행하는 BindCallbacksToDependencies 함수에 위와 같이 로직을 추가한다
ASC의 델리게이트 프로퍼티 EffectAssetTags에 람다 함수를 바인드한다
해당 람다 함수는 GE로부터 받은 GameplayTagContainer를 순회하면서 Tag를 화면에 출력한다
- 최종 실행 결과
'언리얼 엔진 - 게임 프로젝트 > GAS 프레임워크 RPG 프로젝트' 카테고리의 다른 글
| GameplayTags - 최종) GameplayEffect의 Tag로 UI 띄우기 (0) | 2025.07.25 |
|---|---|
| GameplayTags - 3) DataTable에 정의된 Tag 사용하기 (0) | 2025.07.25 |
| GameplayTags - 1) GameplayTag와 GameplayTag의 생성 (0) | 2025.07.20 |
| GameplayEffect - 최종) AttributeSet의 변경 이전과 이후 핸들링 + 커브 테이블의 사용 (0) | 2025.07.18 |
| GameplayEffect - 3) Infinite GameplayEffect와 GE 적용 / 제거 (0) | 2025.07.18 |