- 개요
캐릭터를 성장시킬 수 있는 레벨과 레벨을 올려주는 경험치를 프로젝트에 적용한다
구성은 다음과 같다
- LevelUpInfo 데이터 애셋을 사용하여 레벨별 경험치 / 레벨별 능력치 포인트 / 레벨별 스킬 포인트를 정의
- 경험치를 획득하면 RepNotify를 통해 PlayerState에 전파
- 경험치가 변동되면 델리게이트를 통해 WidgetController 클래스들에 브로드캐스트
- 몬스터의 직업군과 레벨에 따라 다른 경험치를 지급
- 한번에 다수의 레벨이 오르는 등의 세부 사항 조정
1) LevelUpInfo 클래스

위와 같이 AuraLevelUpInfo 구조체를 정의한다
구성은 다음과 같다
- 레벨별로 달성하기 위해 필요한 경험치
- 레벨별로 제공하는 능력치 포인트
- 레벨별로 제공하는 스킬 포인트

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의 OnXPChangedDelegate에 OnXPChanged 멤버함수를 바인드한다

OnXPChanged 함수의 로직은 위와 같다
LevelUPInfo -> 인자로 받은 경험치에 해당하는 레벨을 가져오고 다음의 로직을 진행한다
- LevelUpRequirement : 해당 레벨을 달성하기 위해 필요한 경험치
- PreviousLevelUpRequirement : 해당 레벨 이전의 레벨을 달성하기 위해 필요한 경험치
- DeltaLevelRequirement : 해당 레벨 이전의 레벨에서 해당 레벨까지 필요한 경험치
- XPForThisLevel : 해당 레벨 이전의 레벨에서 해당 레벨까지 필요한 경험치
- XPBarPercent : 해당 레벨 이전의 레벨에서 해당 레벨까지 필요한 경험치를 경험치 바 UI의 비율로 표시할 값
최종적으로 XPBarPercent를 OnXPPercentChangedDelegate 델리게이트의 인자로 전달한다
- 최종 수행 결과

DA_LevelUpInfo 데이터애셋을 생성하고 위와 같이 설정한다
'언리얼 엔진 - 게임 프로젝트 > GAS 프레임워크 RPG 프로젝트' 카테고리의 다른 글
| 경험치와 레벨업 - 3) 레벨업 구현과 경험치 바 UI (0) | 2025.10.24 |
|---|---|
| 경험치와 레벨업 - 2) 경험치 Attribute (0) | 2025.10.24 |
| 코스트와 쿨타임 - 최종) 쿨타임과 UI 연동 (0) | 2025.10.19 |
| 코스트와 쿨타임 - 4) BlueprintAsyncActionReady 클래스를 사용한 어빌리티 쿨타임 설계 (0) | 2025.10.18 |
| 코스트와 쿨타임 - 3) 어빌리티와 UI 연동 마무리 + 어빌리티 비용 설정 (0) | 2025.10.18 |