- 개요
GE에 의해 변경되는 AttributeSet의 변경하기 이전과 이후를 핸들링하기 위해
AttributeSet에 2개의 함수 PreAttributeChange와 PostAttributeChange를 추가한다
또 변경된 AttributeSet의 주체와 AttributeSet을 변경하는 주체를 설정하기 위해
새롭게 구조체 EffectProperties를 추가하고 함수 PostAttributeChange를 추가하여 이를 설정한다
마지막으로 GameplayEffect에 커브 테이블을 추가하여
GE에 의한 변경사항을 선형적으로 적용하는 방법을 알아본다
1) AuraAttributeSet 클래스 : AttributeSet을 핸들링

우선, EffectProperties 구조체를 추가한다
해당 구조체는 GE가 적용되어 AttributeSet이 변경되는 주체와 GE를 적용하는 주체를 설정한다
멤버변수의 구성은 다음과 같다
- EffectContextHandle : 적용된 GameplayEffectContext의 Handle
- 빨간색 범위 : GE를 적용하는 주체의 데이터 - ASC / AvatarActor / Controller / Character
- 파란색 범위 : GE가 적용된 AttributeSet의 주체의 데이터 - ASC / AvatarActor / Controller / Character


총 4개의 함수를 새롭게 추가한다
구성은 다음과 같다
- PreAttributeChange 함수
- Attribute가 변경되기 이전에 CurrentValue를 변경하는 함수
- Attribute가 변경되면 호출됨
- GE에서 설정한 Modifier를 영구적으로 변경하지 않고, 쿼리한 후에 반환한 값만 변경
- 이후 모든 Modifier로부터 CurrentValue를 다시 계산
- 따라서 반드시 Clamp하여 값의 범위를 설정해야 함
- PostGameplayEffectExecute 함수 : GE에 의해 Attribute의 Base Value가 변경된 후 호출
- PostAttributeChange 함수 : Attribute가 하나라도 변경된 후 호출
- SetEffectProperties 함수 : EffectProperties 구조체를 설정하는 함수
또한, 함수에서 사용하는 인자인 GameplayEffectModCallbackData의 경우
GameplayEffect가 Attribute를 변경할 때 발생하는 콜백 데이터이다
따라서 해당 데이터를 사용하여 EffectProperties를 설정한다

PreAttributeChange 함수는 위와 같이 구성하였다
부모 버전의 함수를 먼저 호출하고 Attribute에 따라 새롭게 설정할 값을 Clamp한다

PostGameplayEffectExecute 함수의 로직은 위와 같이 구성하였다
SetEffectProperties 함수를 호출하여 EffectProperties 구조체를 설정하고
새로운 값이 설정되는 Attribute에 따라 Clamp하여 값을 설정한다

PostAttributeChange 함수의 로직은 위와 같이 구성하였다
변경된 Attribute에 따라 연관된 Attribute를 설정한다

SetEffectProperties 함수의 로직은 위와 같이 설정하였다
빨간색 범위에서는 GE를 적용하는 주체의 정보를,
파란색 범위에서는 GE가 적용된 AttributeSet의 주체의 정보를 설정한다
2) Curve Table의 사용


위와 같이 직선의 형태를 지닌 Cuve Table을 생성하였다

GameplayEffect에 사용할 Curve Table을 설정하고 그 안에서 사용할 Curve를 설정한다
Curve Table 옆에 있는 값은 커브의 값에 해당하는 Factor 값을 의미한다


프로젝트에서는 ActorLevel을 통해 Curve Table에 맞는 Factor 값을 결정한다
- 최종 실행 결과
'언리얼 엔진 - 게임 프로젝트 > GAS 프레임워크 RPG 프로젝트' 카테고리의 다른 글
| GameplayTags - 2) GameplayEffect와 GameplayTag (0) | 2025.07.20 |
|---|---|
| GameplayTags - 1) GameplayTag와 GameplayTag의 생성 (0) | 2025.07.20 |
| GameplayEffect - 3) Infinite GameplayEffect와 GE 적용 / 제거 (0) | 2025.07.18 |
| GameplayEffect - 2) Stacking을 통한 중첩 Effect (0) | 2025.07.18 |
| GameplayEffect - 2) Instant / Duration / Period GameplayEffect (0) | 2025.07.13 |