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

GameplayEffect - 최종) AttributeSet의 변경 이전과 이후 핸들링 + 커브 테이블의 사용

monstro 2025. 7. 18. 21:52
728x90
반응형

- 개요

GE에 의해 변경되는 AttributeSet의 변경하기 이전이후를 핸들링하기 위해 

AttributeSet에 2개의 함수 PreAttributeChangePostAttributeChange를 추가한다

변경된 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 값을 결정한다

 

- 최종 실행 결과

 

728x90
반응형