- 개요
영구히 적용되는 Infinite GE를 만들어본다
Infinite로 동작하는 GameplayEffect는 한번 적용되면 로직이 없는 이상 끝나지 않는다
따라서 GE를 적용하고 끝내는 로직을 추가하여 GE의 타입에 따른 다른 동작방식을 설정한다
- AuraEffectActor 클래스

두 개의 열거형 클래스를 추가한다
- EffectApplicationPolicy 열거형 클래스 : GE를 적용하기 위한 정책을 의미
- ApplyOnOverlap : 오버랩되면 GE를 적용
- ApplyOnEndOverlap : 오버랩이 끝나면 GE를 적용
- DoNotApply : GE를 적용하지 않음
- EffectRemovalPolicy 열거형 클래스 : GE를 제거하기 위한 정책을 의미, Infinite만이 사용
- RemoveOnEndOverlap : 오버랩이 끝나면 GE를 제거
- DoNotRemove : GE를 제거하지 않음

2개의 함수 OnOverlap 함수와 OnEndOverlap 함수를 추가한다
두 함수 모두 블루 프린트에서 호출할 수 있도록 BlueprintCallable 속성을 추가한다
두 함수는 새롭게 추가한 GE의 적용 정책 / GE의 삭제 정책에 따라 다르게 로직을 수행한다

위와 같이 새롭게 추가한 멤버 변수들을 4개의 그룹으로 표시하였다
Instant / Duration GameplayEffect의 경우 ApplicationPolicy만을 설정한다
이와는 다르게 Infinite GameplayEffect는 ApplicationPolicy와 RemovalPolicy를 모두를 설정해야 한다
마지막으로 제거할 Infinite GameplayEffect를 저장할 TMap을 추가하였다

ApplyEffectToTarget 함수에 위와 같이 로직을 추가하였다
GESpecHandle에 접근하여 GE를 가져오고 GE로부터 Duration을 가져와 Infinite인지, 아닌지를 저장한다
만약 Infinite GameplayEffect이면서, RemovalPolicy가 설정되어 있다면
프로퍼티로 추가한 TMap에 해당 GameplyEffect와 Target의 ASC를 저장한다
만약, Infinite GameplayEffect가 아니라면 해당 GE를 적용하는 EffectActor를 파괴한다

OnOverlap 함수는 위와 같이 구성하였다
ApplicationPolicy에 따라 적합한 GameplayEffect를 대상에게 적용한다

OnEndOverlap 함수는 위와 같이 구성하였다
ApplicationPolicy에 따라 적합한 GameplayEffect를 대상에게 적용한다
그리고 RemovalPolicy가 설정되어 있다면
GE의 타겟으로부터 ASC를 가져오고 ActiveGameplayEffectHandle을 저장하는 빈 TArray를 생성한다
프로퍼티 ActiveEffectHandles를 순회하면서 ActiveGameplayEffectHandle과 ASC의 튜플을 가져오는데,
타겟의 ASC와 튜플의 ASC가 동일하면 타겟에게서 해당 GameplayEffect를 제거하고 Stack 카운트를 1 깎는다
또 생성한 빈 TArray에 가져온 튜플의 Key인 ActiveGameplayEffectHandle을 저장한다
이후 생성한 TArray를 순회하면서
프로퍼티 TMap에서 순회중인 ActiveGameplayEffectHandle을 삭제한다
- 최종 실행 결과
'언리얼 엔진 - 게임 프로젝트 > GAS 프레임워크 RPG 프로젝트' 카테고리의 다른 글
| GameplayTags - 1) GameplayTag와 GameplayTag의 생성 (0) | 2025.07.20 |
|---|---|
| GameplayEffect - 최종) AttributeSet의 변경 이전과 이후 핸들링 + 커브 테이블의 사용 (0) | 2025.07.18 |
| GameplayEffect - 2) Stacking을 통한 중첩 Effect (0) | 2025.07.18 |
| GameplayEffect - 2) Instant / Duration / Period GameplayEffect (0) | 2025.07.13 |
| GameplayEffect - 1) GameplayEffect란? (0) | 2025.07.13 |