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

경험치와 레벨업 - 1) LevelUpInfo 클래스를 통한 레벨 정의

monstro 2025. 10. 23. 15:26
728x90
반응형

- 개요

캐릭터를 성장시킬 수 있는 레벨레벨을 올려주는 경험치를 프로젝트에 적용한다

구성은 다음과 같다

  • LevelUpInfo 데이터 애셋을 사용하여 레벨별 경험치 / 레벨별 능력치 포인트 / 레벨별 스킬 포인트를 정의
  • 경험치를 획득하면 RepNotify를 통해 PlayerState에 전파
  • 경험치가 변동되면 델리게이트를 통해 WidgetController 클래스들에 브로드캐스트
  • 몬스터의 직업군레벨에 따라 다른 경험치를 지급
  • 한번에 다수의 레벨이 오르는 등의 세부 사항 조정

 

1) LevelUpInfo 클래스

AuraLevelUpInfo 구조체

 

위와 같이 AuraLevelUpInfo 구조체를 정의한다

구성은 다음과 같다

  • 레벨별로 달성하기 위해 필요한 경험치
  • 레벨별로 제공하는 능력치 포인트
  • 레벨별로 제공하는 스킬 포인트

LevelUpInfo 클래스

 

LevelUpInfo 클래스를 위와 같이 정의하였다 해당 클래스는 DataAsset 형태로 사용한다

LevelUpInformation 멤버변수를 사용하여 레벨에 따른 설정을 정의한다

 

 

FindLevelForXP 함수의 로직은 위와 같다

인자로 받은 경험치에 해당하는 레벨을 찾아서 반환하는 용도로 사용한다

 

2) AuraPlayerState 클래스

 

경험치레벨의 변동사항을 브로드캐스트하기 위한 OnPlayerStatChanged 델리게이트를 추가한다

1 : 多 형태로 브로드캐스트하며 인자로 정수값을 받도록 설정한다

 

 

추가한 OnPlayerStatChanged 델리게이트의 멤버변수를 2개 추가한다

  • OnXPChangedDelegate : 경험치의 변동을 브로드캐스트
  • OnLevelChangedDelegate : 레벨의 변동을 브로드캐스트

 

 

경험치와 관련된 멤버함수와 멤버변수를 추가하고, 레벨을 수정하기 위한 함수들도 새롭게 추가한다

 

 

새롭게 추가한 함수들의 구성은 위와 같다

  • AddToXP : 경험치획득, 이후 브로드캐스트
  • AddToLevel : 레벨획득, 이후 브로드캐스트
  • SetXP : 경험치수정, 이후 브로드캐스트
  • SetLebel : 레벨수정, 이후 브로드캐스트

 

 

GetLifetimeReplicatedProps 함수에서 XP를 서버에서 클라이언트로 레플리케이션하도록 설정한다

 

 

XP가 변동되면 레플리케이션하면서 호출하는 OnRep_XP 함수의 로직은 위와 같이 구성한다

 

3) OverlayWidgetController 클래스

 

UI에서 경험치의 변동을 보여주기 위한 설정을 진행한다

OnXPPercentChangedDelegate 멤버변수경험치가 변동되면 경험치 UI에게 브로드캐스트하는 용도로 사용한다

 

 

BindCallbacksToDependencies 함수를 위와 같이 수정한다

PlayerState의 OnXPChangedDelegateOnXPChanged 멤버함수를 바인드한다

 

 

OnXPChanged 함수의 로직은 위와 같다

LevelUPInfo -> 인자로 받은 경험치에 해당하는 레벨을 가져오고 다음의 로직을 진행한다

  • LevelUpRequirement : 해당 레벨을 달성하기 위해 필요한 경험치
  • PreviousLevelUpRequirement : 해당 레벨 이전의 레벨을 달성하기 위해 필요한 경험치
  • DeltaLevelRequirement : 해당 레벨 이전의 레벨에서 해당 레벨까지 필요한 경험치
  • XPForThisLevel : 해당 레벨 이전의 레벨에서 해당 레벨까지 필요한 경험치
  • XPBarPercent : 해당 레벨 이전의 레벨에서 해당 레벨까지 필요한 경험치경험치 바 UI의 비율로 표시할 값

최종적으로 XPBarPercentOnXPPercentChangedDelegate 델리게이트의 인자로 전달한다

 

- 최종 수행 결과

 

DA_LevelUpInfo 데이터애셋을 생성하고 위와 같이 설정한다

728x90
반응형