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

경험치와 레벨업 - 3) 레벨업 구현과 경험치 바 UI

monstro 2025. 10. 24. 20:59
728x90
반응형

- 개요

몬스터를 쓰러뜨리면 몬스터의 직업군별로 설정된 경험치를 플레이어에게 제공하고,

플레이어는 경험치를 쌓으면 레벨업을 하는 시스템을 추가한다

그리고 플레이어가 현재 갖고 있는 경험치를 보여주는 경험치 바 UI를 추가한다

 

1) C++ 사이드

1 - 1) PlayerInterface 클래스

 

플레이어와 관련된 동작을 정의한 PlayerInterface 클래스를 새롭게 정의한다

함수의 구성은 다음과 같다

  • FindLevelForXP 함수 : 플레이어의 경험치에 따른 레벨을 반환
  • GetXP 함수 : 플레이어의 경험치를 반환
  • GetAttributePointsReward 함수 : 플레이어의 능력치 포인트를 반환
  • GetSpellPointsReward 함수 : 플레이어의 스킬 포인트를 반환
  • AddToXP 함수 : 플레이어의 경험치를 수정
  • AddToPlayerLevel 함수 : 플레이어의 레벨을 수정
  • AddToAttributePoints 함수 : 플레이어의 능력치 포인트를 수정
  • AddToSpellPoints 함수 : 플레이어의 스킬 포인트를 수정
  • LevelUp 함수 : 플레이어의 레벨을 증가

 

1 - 2) AuraCharacter 클래스

 

상속 관계에 PlayerInterface를 추가한다

 

 

PlayerInterface로부터 상속된 함수들을 위와 같이 오버라이드한다

각 함수들은 BlueprintNativeEvent 속성을 사용하였으므로 "_Implementation"을 수식하여 오버라이드한다

 

 

오버라이드한 로직은 위와 같다

LevelUP / AddToAttributePoints / AddToSpellPoints 함수들의 로직은 아직 작성하지 않았다

 

1 - 3) AuraAttributeSet 클래스

 

IncomingXP 어트리뷰트가 수정되는 경우 핸들링하기 위한 HandleIncomingXP 함수를 추가한다

또, 피해를 받아 IncomingDamage가 수정된 몬스터로부터 호출되는 SendXPEvent 함수를 추가한다

SendXPEvent 함수를 호출하여 "Attributes"가 포함된 Tag의 이벤트를 플레이어를 향해 발동시킨다

 

 

PostGameplayEffectExecute 함수의 로직을 위와 같이 수정한다

GameplayEffect에 의해 IcomingXP 어트리뷰트가 수정되면 HandleIncomingXP 함수를 호출한다

 

 

HandleIncomingDamage 함수에 위의 로직을 추가한다

몬스터가 공격을 받아 쓰러지면 SendXPEvent 함수를 호출하여 "Attributes" 태그의 이벤트를 플레이어에게 발동한다

 

 

SendXPEvent 함수의 로직은 위와 같다

몬스터의 레벨과 몬스터의 직업군에 따라 제공할 경험치를 설정하고,

IncomingDamage를 수정한 GE의 SourceCharacter인 플레이어에게 이벤트를 발동시키면서 설정한 경험치를 넘겨준다

 

 

HandleIncomingXP 함수의 로직은 위와 같다

플레이어를 레벨업시키면서 스킬 포인트능력치 포인트를 제공한다

그리고 플레이어의 현재 체력현재 마나최대 체력최대 마나로 회복시켜준다

 

2) 블루프린트 사이드

2 - 1) GA_ListenForEvent 블루프린트

ActivateAbility 이벤트

 

ActivateAbility 이벤트에서 로그를 띄우는 로직을 제거하였다

 

2 - 2) AuraPlayerState 블루프린트

 

레벨업과 관련된 멤버변수를 설정하였다

 

2 - 3) WBP_XPBar 위젯 블루프린트

WidgetControllerSet 이벤트

 

위와 같이 로직을 설정하여 WidgetController가 설정된 후에,

XPPercentChangeDelegate가 브로드캐스트되면 경험치 바의 비율을 설정한다

 

2 - 4) WBP_Overlay 위젯 블루프린트

WidgetControllerSet 이벤트의 2번째 시퀀스

 

경험치 바 UI의 WidgetController를 설정한다

 

- 최종 실행 결과

 

728x90
반응형