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

게임 맵 - 문제 수정) GameplayModMagnitudeCalculation 클래스의 동작 방식 개선

monstro 2026. 1. 13. 20:27
728x90
반응형

- 개요

https://monstrosite.tistory.com/1072

 

게임 맵 - 4) 아이템 드롭

- 개요적을 쓰러트리면 아이템을 드롭하는 시스템을 추가한다 - C++ 사이드1) LootTiers 클래스 적이 드롭하는 아이템으로 사용하는 LootItem 구조체를 추가한다멤버변수의 구성은 다음과 같다LootClass

monstrosite.tistory.com

 

이전 포스트에 첨부된 동영상을 확인해보면 레벨업을 하게 되면서

체력마나가 완전히 회복되야 하지만 회복되지 않는 문제를 확인할 수 있다

위와 같은 문제는 최대 체력최대 마나를 설정하는 MMC 클래스에서 발생한다

 

문제의 발생 예시

 

MMC 클래스스탯과 같은 가중치를 사용하여 어트리뷰트를 수정하는 GE수치동적으로 계산하는 역할을 수행한다

이때 레벨업하게 되면 사용하고 있는 가중치의 값이 변경되고 변경된 값을 기반으로 결과를 산출해야 한다

그러나 현재 상황에서변경된 가중치의 값을 즉시 반영하지 못해 잘못된 값으로 체력 + 마나를 설정하고 있다

따라서 위의 문제를 해결한다

 

- 문제 처리 절차

1) PlayerInterface 클래스

 

OnExternalGameplayModifierDependencyChange 포인터를 반환하는 추상 함수를 추가한다

OnExternalGameplayModifierDependencyChange의 역할은 다음과 같다

  • MMC가 참조하고 있는 가중치의 값이 수정되었으므로 다시 계산해야 한다는 정보를 전파하는 역할
  • 멀티캐스트 델리게이트로서 인자없이 브로드캐스트하여 MMC는 계산을 다시 수행함 

 

2) AuraCharacter 클래스

OnExternalGameplayModifierDependencyChange 델리게이트 멤버변수 추가

 

추가된 함수 오버라이드

 

위와 같이 PlayerInterface에서 추가한 함수를 오버라이드하여 

OnExternalGameplayModifierDependencyChange 델리게이트를 반환한다

 

3) AuraPlayerState 클래스

 

AddToLevel 함수를 위와 같이 수정하여

플레이어가 레벨업하게 되면 플레이어의 GetOnModifierDependencyChanged 함수를 호출하고

반환된 OnExternalGameplayModifierDependencyChange 델리게이트를 브로드캐스트하여 MMC를 다시 계산한다

 

4) MMC_MaxMana 클래스

 

 

GetExternalModifierDependencyMulticast 함수를 오버라이드한다

위와 같이 오버라이드하여 PlayerInterface를 상속받은 플레이어의 데이터가 변경될 때마다

MMC로 수정하는 GameplayEffect의 수치를 다시 계산한다

 

- 주의사항

여러개의 MMC 클래스가 존재해도 GetExternalModifierDependencyMulticast 함수

하나의 MMC 클래스에서 오버라이드하는 것이 효율적이다

이유는 다음과 같다

  • OnExternalGameplayModifierDependencyChange가 브로드캐스트되면 모든 GE가 한번 다시 계산
  • 불필요한 델리게이트 바인딩브로드캐스트 비용을 절감할 수 있음
  • 수치 갱신 시점이 명확하여 추적이 용이

 

- 최종 실행 결과

 

728x90
반응형