- 개요
Modifier Magnitude Calculations 클래스를 추가하여
최대 체력의 Attribute인 MaxHealth와 최대 마나의 Attribute인 MaxMana를 설정한다
MMC 클래스를 동작시키기 위해서는 다음과 같은 절차가 필요하다
- Attribute를 수정할 캡쳐 Attribute 설정 : GameplayEffectAttributeCaptureDefinition 프로퍼티 설정
- 캡쳐된 Attribute를 통한 연산 수행 : CalculateBaseMagnitude 함수 오버라이드
1) 최대체력 Attribute 설정
1 - 1) MMC_MaxHealth 클래스 헤더 파일

헤더 파일은 위와 같이 구성하였다
함수로 프로퍼티를 설정할 생성자와 MMC 클래스의 연산을 수행할 CalculateBaseMagnitude 함수를 추가한다
프로퍼티로는 캡쳐할 어트리뷰트인 Vigor를 지정할 VigorDef를 생성한다
1 - 2) MMC_MaxHealth 클래스 cpp 파일

생성자는 위와 같이 구성하였다
- 1) AttributeSet에서 Capture할 Vigor 어트리뷰트를 가져와 프로퍼티의 AttributeToCapture에 저장
- 2) Target으로부터 Vigor 어트리뷰트를 Capture하도록 설정
- 3) 스냅샷은 사용하지 않도록 설정
- 4) 설정된 프로퍼티를 RelevantAttributesToCapture에 추가하여 Capture할 어트비뷰트로 Vigor를 등록

CalculateBaseMagnitude 함수는 위와 같이 구성하였다
- 1) 적용할 GESpec으로부터 Source와 Target의 Gameplay Tag를 가져온다
- 2) AggregatorEvaluateParameters : GE가 적용될 때 Attribute를 처리하기 위해 필요한 파라미터
- 이때 해당 파라미터의 SourceTag와 TargetTag를 1)에서 가져온 Tag로 설정한다
- 3) GetCapturedAttributeMagnitude 함수를 통해 Capture된 어트리뷰트의 크기를 가져오고 값을 조정
- 4) SourceObject로부터 오버라이드된 GetPlayerLevel 함수를 호출하여 Level 프로퍼티를 가져온다
- 5) 최종적으로 식을 정리하여 MaxHealth 값을 조정한다
위의 과정을 거쳐 최종 결과를 예측하면 다음과 같다

따라서 112.5가 최종 MaxHealth의 값이 된다
2) 최대마나 Attribute 설정
2 - 1) MMC_MaxMana 클래스 헤더 파일

헤더 파일의 구성은 MMC_MaxHealth와 비슷하다
차이점은 프로퍼티로 캡쳐할 어트리뷰트를 Intelligence로 지정하고 IntDef를 생성한다
2 - 2) MMC_MaxMana 클래스 cpp 파일

생성자의 로직도 비슷한데,
차이점은 Capture할 어트리뷰트를 Intelligence로 지정한다는 점이다

CalculateBaseMagnitude_Implementation 함수의 로직도 비슷하다
기반으로 삼는 Atrribute가 Intelligence이고, 최종 계산식이 다르다는 차이점이 존재한다
위의 과정을 거쳐 최종 결과를 예측하면 다음과 같다

따라서 107.5가 최종 MaxMana의 값이 된다
- 최종 실행 결과

위와 같이 Modifier에서 Custom Calculation Class를 지정한다

MMC가 잘 동작하여 예측한 결과값이 나타나는 것을 확인할 수 있다
'언리얼 엔진 - 게임 프로젝트 > GAS 프레임워크 RPG 프로젝트' 카테고리의 다른 글
| 스탯창 UI - 2) Native한 GameplayTag + AssetManager (0) | 2025.08.01 |
|---|---|
| 스탯창 UI - 1) 스탯창 UI 애셋과 설계 구조 (0) | 2025.08.01 |
| RPG 게임의 능력치 - 4) 새로운 능력치 추가와 레벨 시스템 추가 (0) | 2025.07.27 |
| RPG 게임의 능력치 - 3) Attribute Based 모디파이어 (0) | 2025.07.27 |
| RPG 게임의 능력치 - 1) Attribute를 초기화하는 방법 (0) | 2025.07.25 |