언리얼 엔진 - 게임 프로젝트/GAS 프레임워크 RPG 프로젝트

GameplayTags - 2) GameplayEffect와 GameplayTag

monstro 2025. 7. 20. 20:18
728x90
반응형

- 개요

GameplayTag와 GameplayEffect는 밀접한 관계가 있다

특정한 GameplayTag를 가진 대상에게만 GameplayEffect를 적용할 수 있게끔 설계가 가능하고

GameplayEffect가 적용된 대상에게 특정한 GameplayTag를 부여할 수 있다

또는 특정한 GameplayTag를 가진 GameplayEffect만이 적용될 수 있도록 설계할 수 있다

 

간단하게 GameplayEffect적용 대상에게 GameplayTag를 부여하는 방법

GameplayEffectGameplayTag를 부여하는 방법을 알아본다 

 

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 ActorOwner 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를 화면에 출력한다

 

- 최종 실행 결과

 

728x90
반응형