0. 개요
이제 속성 포인트를 사용하여 속성 값을 올리게 할 것이다.
속성 메뉴의 각 속성 행들은 고유의 게임플레이 태그를 가지고 있다.
게임플레이 태그를 사용하여 속성 값을 업데이트한다.
1. 속성 포인트 사용
(1) 속성 값 변화
UFUNCTION(BlueprintNativeEvent)
int32 GetAttributePoints() const;
UFUNCTION(BlueprintNativeEvent)
int32 GetSpellPoints() const;
(2)
virtual int32 GetAttributePoints_Implementation() const override;
virtual int32 GetSpellPoints_Implementation() const override;
// 플레이어 인터페이스 끝
int32 AAuraCharacter::GetAttributePoints_Implementation() const
{
AAuraPlayerState* AuraPlayerState = GetPlayerState<AAuraPlayerState>();
check(AuraPlayerState);
return AuraPlayerState->GetAttributePoints();
}
int32 AAuraCharacter::GetSpellPoints_Implementation() const
{
AAuraPlayerState* AuraPlayerState = GetPlayerState<AAuraPlayerState>();
check(AuraPlayerState);
return AuraPlayerState->GetSpellPoints();
}
(3)
UFUNCTION(BlueprintCallable)
void UpgradeAttribute(const FGameplayTag& AttributeTag);
void UAttributeMenuWidgetController::UpgradeAttribute(const FGameplayTag& AttributeTag)
{
UAuraAbilitySystemComponent* AuraASC = CastChecked<UAuraAbilitySystemComponent>(AbilitySystemComponent);
AuraASC->UpgradeAttribute(AttributeTag);
}
(4)
void UpgradeAttribute(const FGameplayTag& AttributeTag);
void UAuraAbilitySystemComponent::UpgradeAttribute(const FGameplayTag& AttributeTag)
{
if (GetAvatarActor()->Implements<UPlayerInterface>())
{
if (IPlayerInterface::Execute_GetAttributePoints(GetAvatarActor()) > 0)
{
ServerUpgradeAttribute(AttributeTag);
}
}
}
(5)
UFUNCTION(Server, Reliable)
void ServerUpgradeAttribute(const FGameplayTag& AttributeTag)
void UAuraAbilitySystemComponent::ServerUpgradeAttribute_Implementation(const FGameplayTag& AttributeTag)
{
// 액터에게 게임플레이 이벤트 전송 -> 이벤트 수신 어빌리티 작동
FGameplayEventData Payload;
Payload.EventTag = AttributeTag;
Payload.EventMagnitude = 1.f;
UAbilitySystemBlueprintLibrary::SendGameplayEventToActor(GetAvatarActor(), AttributeTag, Payload);
// 속성 포인트 감소
if (GetAvatarActor()->Implements<UPlayerInterface>())
{
IPlayerInterface::Execute_AddToAttributePoints(GetAvatarActor(), -1);
}
}
- RPC 함수를 정의할 때에는 함수 이름 끝에 _Implementation을 붙여야 한다.
(링크 오류가 발생함)
2. 이벤트
(1) 이벤트 대기 어빌리
이전에 게임플레이 이벤트를 기다리는 어빌리티를 만들었다.
20-6. 경험치 - (5) 이벤트를 기다리는 패시브 게임플레이 어빌리티
0. 개요몬스터가 죽으면서 경험치를 부여하는 이벤트를 발동하면 감지하고 부여량을 가져오는 게임플레이 어빌리티를 생성한다. 1. 패시브 게임플레이 어빌리티이 어빌리티는 서버에서만 실
crat.tistory.com
해당 어빌리티는 게임플레이 태그의 최상위 계층이 Attribute인 모든 태그에 대해서 동작한다.
어빌리티의 이벤트 그래프를 살펴보면 게임플레이 이펙트 클래스에서 태그와 일치하는 속성을 찾아 값을 반환하고 있다.
해당 게임플레이 이펙트 클래스는 GE_EventBasedEffect이다.
이제 게임플레이 이펙트를 수정하여 1차 속성 4개에 대해 Set by Caller Magnitude 값을 더하게 한다.
(2) WBP_TextValueButtonRow 이벤트 그래프
이제 클릭 이벤트에 Upgrade Attribute 함수를 바인딩한다.
'UE 5 스터디 > Gameplay Ability System(GAS)' 카테고리의 다른 글
21-5. 속성 메뉴 UI - (9) 속성 메뉴 개선, 버튼 소리 추가 (0) | 2025.01.20 |
---|---|
21-4. 레벨업 디버그 (0) | 2025.01.20 |
21-2. 속성 메뉴 UI - (8) 속성 포인트 올리기 버튼 (0) | 2025.01.20 |
21-1. 속성 포인트 / 스펠 포인트 - (1) 멤버 변수화, 델리게이트 선언, 람다 함수 바인드 (0) | 2025.01.20 |
20-13. 레벨업 - (5) 레벨업 시 레벨업 메시지 표시 (0) | 2025.01.20 |