0. 개요
게임에 경험치 개념을 도입하기 위해서 플레이어 상태(Player State)에 경험치를 멤버 변수로 둔다.
1. 경험치 도입
(1) AuraPlayerState 플레이어 상태에서 개념 추가
private:
UPROPERTY(VisibleAnywhere, ReplicatedUsing = OnRep_Level)
int32 Level = 1;
UPROPERTY(VisibleAnywhere, ReplicatedUsing = OnRep_XP)
int32 XP = 0;
UFUNCTION()
void OnRep_Level(int32 OldLevel);
UFUNCTION()
void OnRep_XP(int32 OldXP);
경험치 레벨 계산은 서버에서 발생하고 OnRep 노티파이를 통해 클라이언트로 복제된다.
(2) 변수를 복제 대상으로 지정
void AAuraPlayerState::GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const
{
Super::GetLifetimeReplicatedProps(OutLifetimeProps);
DOREPLIFETIME(AAuraPlayerState, Level);
DOREPLIFETIME(AAuraPlayerState, XP);
}
(3) 멀티캐스트 델리게이트 선언
DECLARE_MULTICAST_DELEGATE_OneParam(FOnPlayerStatChanged, int32);
레벨 변화와 경험치 변화 등을 감지하기 위해 멀티캐스트 델리게이트를 선언한다.
(4) 경험치 Getter / Setter / Adder
// 경험치
FOnPlayerStatChanged OnXPChangedDelegate;
FORCEINLINE int32 GetPlayerLevel() const { return Level; }
FORCEINLINE int32 GetXP() const { return XP; }
void SetXP(int32 GainedXP);
void AddToXP(int32 GainedXP);
void AAuraPlayerState::SetXP(int32 GainedXP)
{
XP = GainedXP;
OnXPChangedDelegate.Broadcast(XP);
}
void AAuraPlayerState::AddToXP(int32 GainedXP)
{
XP += GainedXP;
OnXPChangedDelegate.Broadcast(XP);
}
void AAuraPlayerState::OnRep_Level(int32 OldLevel)
{
}
void AAuraPlayerState::OnRep_XP(int32 OldXP)
{
// 블루프린트로 전달
OnXPChangedDelegate.Broadcast(XP);
}
XP 변화에 대해 XPChnagedDelegate를 생성했었으므로 그를 이용해 변화된 XP를 전송한다.
OnRep_XP에서 변화된 경험치 값을 블루프린트로 전송한다.
2. 레벨
(1) 레벨 변화 델리게이트
// 경험치, 레벨
FOnPlayerStatChanged OnXPChangedDelegate;
FOnPlayerStatChanged OnLevelChangedDelegate;
FOnPlayerStatChanged는 멀티캐스트 델리게이트이므로 또 다른 리스너를 지정(시그니쳐 재활용)할 수 있다.
(2) 레벨 Getter / Setter
void SetLevel(int32 InLevel);
void AddToLevel(int32 InLevel);
void AAuraPlayerState::SetLevel(int32 InLevel)
{
Level = InLevel;
OnLevelChangedDelegate.Broadcast(Level);
}
void AAuraPlayerState::AddToLevel(int32 InLevel)
{
Level += InLevel;
OnLevelChangedDelegate.Broadcast(Level);
}
void AAuraPlayerState::OnRep_Level(int32 OldLevel)
{
// 블루프린트로 전달
OnLevelChangedDelegate.Broadcast(Level);
}
'UE 5 스터디 > Gameplay Ability System(GAS)' 카테고리의 다른 글
20-5. 경험치 - (4) 몬스터에 경험치 부여 (0) | 2025.01.15 |
---|---|
20-4. 경험치 - (3) 경험치 변화 델리게이트 바인딩 (0) | 2025.01.15 |
20-2. 경험치 - (1) 레벨업 정보 데이터 에셋 (0) | 2025.01.15 |
20-1. 경험치와 레벨업 (0) | 2025.01.15 |
19-10. 모델링 모드 (0) | 2025.01.14 |