- 개요
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 클래스


위와 같이 PlayerInterface에서 추가한 함수를 오버라이드하여
OnExternalGameplayModifierDependencyChange 델리게이트를 반환한다
3) AuraPlayerState 클래스

AddToLevel 함수를 위와 같이 수정하여
플레이어가 레벨업하게 되면 플레이어의 GetOnModifierDependencyChanged 함수를 호출하고
반환된 OnExternalGameplayModifierDependencyChange 델리게이트를 브로드캐스트하여 MMC를 다시 계산한다
4) MMC_MaxMana 클래스


GetExternalModifierDependencyMulticast 함수를 오버라이드한다
위와 같이 오버라이드하여 PlayerInterface를 상속받은 플레이어의 데이터가 변경될 때마다
MMC로 수정하는 GameplayEffect의 수치를 다시 계산한다
- 주의사항
여러개의 MMC 클래스가 존재해도 GetExternalModifierDependencyMulticast 함수는
하나의 MMC 클래스에서 오버라이드하는 것이 효율적이다
이유는 다음과 같다
- OnExternalGameplayModifierDependencyChange가 브로드캐스트되면 모든 GE가 한번 다시 계산됨
- 불필요한 델리게이트 바인딩 및 브로드캐스트 비용을 절감할 수 있음
- 수치 갱신 시점이 명확하여 추적이 용이
- 최종 실행 결과
'언리얼 엔진 - 게임 프로젝트 > GAS 프레임워크 RPG 프로젝트' 카테고리의 다른 글
| 게임 맵 - 최종) 드롭되는 아이템 애니메이션 수정 + 인게임 종료 버튼 (0) | 2026.01.15 |
|---|---|
| 게임 맵 - 4) 아이템 드롭 (0) | 2026.01.12 |
| 게임 맵 - 3) 몬스터 스포너와 맵 재시작 구현 (0) | 2026.01.11 |
| 게임 맵 - 2) 던전 구조물과 입구 추가 (0) | 2026.01.10 |
| 게임 맵 - 1) 커서 동작 수정 (0) | 2026.01.09 |