0. 개요
XP 계산은 AuraAttributeSet에서 관리되고 있다.
하지만 XP와 레벨 조정은 플레이어 상태인 AuraPlayerState에서 관리되고 있다.
속성 세트와 플레이어 상태가 서로 종속적이지 않도록 인터페이스를 사용한다.
1. PlayerInterface 새로운 인터페이스 생성
경험치 획득과 조절, 레벨 조절을 위한 인터페이스를 생성한다.
(1) AuraCharacter에 인터페이스 상속
#pragma once
#include "CoreMinimal.h"
#include "Character/AuraCharacterBase.h"
#include "Interaction/PlayerInterface.h"
#include "AuraCharacter.generated.h"
/**
*
*/
UCLASS()
class AURA_API AAuraCharacter : public AAuraCharacterBase, public IPlayerInterface
{
이제 플레이어 캐릭터인 AuraCharacter는 PlayerInterface를 상속받아 사용하게 된다.
(2) 경험치 추가 함수
UCLASS()
class AURA_API AAuraCharacter : public AAuraCharacterBase, public IPlayerInterface
{
GENERATED_BODY()
public:
AAuraCharacter();
virtual void PossessedBy(AController* NewController) override;
virtual void OnRep_PlayerState() override;
// 플레이어 인터페이스
virtual void AddToXP_Implementation(int32 InXP) override;
// 플레이어 인터페이스 끝
void AAuraCharacter::AddToXP_Implementation(int32 InXP)
{
AAuraPlayerState* AuraPlayerState = GetPlayerState<AAuraPlayerState>();
check(AuraPlayerState);
AuraPlayerState->AddToXP(InXP);
}
이제 Aura Character에서 PlayerInterface의 AddToXP를 오버라이드하여 AuraPlayerState를 이용해 XP를 추가한다.
(3) UAuraAttributeSet에서 PostGameplayEffectExecute 내의 경험치 메타 속성 계산식
// 경험치 계산
if (Data.EvaluatedData.Attribute == GetIncomingXPAttribute())
{
const float LocalIncomingXP = GetIncomingXP();
SetIncomingXP(0);
// TODO : 레벨업 체크 필요
if (Props.SourceCharacter->Implements<UPlayerInterface>())
{
IPlayerInterface::Execute_AddToXP(Props.SourceCharacter, LocalIncomingXP);
}
}
}
이제 메타 속성을 사용해 값을 업데이트하고 전달한다.
2. 경험치 바
획득한 경험치를 오버레이 내의 XPBar에 표시한다.
(1) WBP_Overlay에서 XPBar에 위젯 컨트롤러 연결
경험치 바인 XPBar는 Overlay에서 표시되고 있다.
XPBar에 Overlay Widget Controller를 연결한다.
(2) WBP_XPBar에서 위젯 컨트롤러 Set 이벤트 설정
(2-1) Overlay Widget Controller의 블루프린트 버전 가져오기
위젯 컨트롤러를 블루프린트 버전으로 캐스팅하여 가져온다.
이는 블루프린트 이벤트를 사용하기 위함이다.
(2) On XPPercentChanged 이벤트 할당
경험치를 수신하면 OverlayWidgetController 클래스에서 이전에 작성했던 OnXPChanged 콜백 함수가 발동하며 XPBar에 대한 계산을 실행한다.
- BP_AuraPlayerState에 Level Up Info 지정
위에서 디버그를 실행하여 몬스터를 처치했을때 크래시가 발생하면 레벨업 정보를 지정해준다.
'UE 5 스터디 > Gameplay Ability System(GAS)' 카테고리의 다른 글
20-10. 레벨업 - (2) 레벨업 및 속성 & 스펠 포인트 획득 (0) | 2025.01.16 |
---|---|
20-9. 레벨업 - (1) 캐릭터 레벨 Getter 코드 리펙토링 (0) | 2025.01.16 |
20-7. 경험치 - (6) 게임플레이 이벤트 발동 (0) | 2025.01.16 |
20-6. 경험치 - (5) 이벤트를 기다리는 패시브 게임플레이 어빌리티 (0) | 2025.01.16 |
20-5. 경험치 - (4) 몬스터에 경험치 부여 (0) | 2025.01.15 |