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

RPG 게임의 능력치 - 최종) Modifier Magnitude Calculations 클래스

monstro 2025. 7. 28. 01:06
728x90
반응형

- 개요

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와 TargetGameplay Tag를 가져온다
  • 2) AggregatorEvaluateParameters : GE가 적용될 때 Attribute를 처리하기 위해 필요한 파라미터
    • 이때 해당 파라미터SourceTagTargetTag1)에서 가져온 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 함수의 로직도 비슷하다

기반으로 삼는 AtrributeIntelligence이고, 최종 계산식이 다르다는 차이점이 존재한다

 

위의 과정을 거쳐 최종 결과를 예측하면 다음과 같다

 

따라서 107.5가 최종 MaxMana의 값이 된다

 

- 최종 실행 결과

 

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

 

 

MMC가 잘 동작하여 예측한 결과값이 나타나는 것을 확인할 수 있다

728x90
반응형