728x90
반응형
이번 포스트에서는 Attribute를 초기화하는 2가지 방법 중에서
데이터 테이블을 통해 초기화하는 방법을 알아보겠습니다.
그리고 동시에 향후 게임에서 사용할 Attribute를 추가하도록 하겠습니다.
1) AuraAttributeSet
UCLASS()
class AURA_API UAuraAttributeSet : public UAttributeSet
{
.
.
.
public:
/*
* RPG Stat Attribute & Method
*/
UPROPERTY(BlueprintReadOnly, ReplicatedUsing = OnRep_Strength, Category = "Stat Attributes")
FGameplayAttributeData Strength;
ATTRIBUTE_ACCESSORS(UAuraAttributeSet, Strength);
UPROPERTY(BlueprintReadOnly, ReplicatedUsing = OnRep_Intelligence, Category = "Stat Attributes")
FGameplayAttributeData Intelligence;
ATTRIBUTE_ACCESSORS(UAuraAttributeSet, Intelligence);
UPROPERTY(BlueprintReadOnly, ReplicatedUsing = OnRep_Resilience, Category = "Stat Attributes")
FGameplayAttributeData Resilience;
ATTRIBUTE_ACCESSORS(UAuraAttributeSet, Resilience);
UPROPERTY(BlueprintReadOnly, ReplicatedUsing = OnRep_Vigor, Category = "Stat Attributes")
FGameplayAttributeData Vigor;
ATTRIBUTE_ACCESSORS(UAuraAttributeSet, Vigor);
UFUNCTION()
void OnRep_Strength(const FGameplayAttributeData& OldStrength) const;
UFUNCTION()
void OnRep_Intelligence(const FGameplayAttributeData& OldIntelligence) const;
UFUNCTION()
void OnRep_Resilience(const FGameplayAttributeData& OldResilience) const;
UFUNCTION()
void OnRep_Vigor(const FGameplayAttributeData& OldVigor) const;
.
.
.
};
.
.
.
void UAuraAttributeSet::GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const
{
Super::GetLifetimeReplicatedProps(OutLifetimeProps);
DOREPLIFETIME_CONDITION_NOTIFY(UAuraAttributeSet, Strength, COND_None, REPNOTIFY_Always);
DOREPLIFETIME_CONDITION_NOTIFY(UAuraAttributeSet, Intelligence, COND_None, REPNOTIFY_Always);
DOREPLIFETIME_CONDITION_NOTIFY(UAuraAttributeSet, Resilience, COND_None, REPNOTIFY_Always);
DOREPLIFETIME_CONDITION_NOTIFY(UAuraAttributeSet, Vigor, COND_None, REPNOTIFY_Always);
.
.
.
}
.
.
.
void UAuraAttributeSet::OnRep_Strength(const FGameplayAttributeData& OldStrength) const
{
GAMEPLAYATTRIBUTE_REPNOTIFY(UAuraAttributeSet, Strength, OldStrength);
}
void UAuraAttributeSet::OnRep_Intelligence(const FGameplayAttributeData& OldIntelligence) const
{
GAMEPLAYATTRIBUTE_REPNOTIFY(UAuraAttributeSet, Intelligence, OldIntelligence);
}
void UAuraAttributeSet::OnRep_Resilience(const FGameplayAttributeData& OldResilience) const
{
GAMEPLAYATTRIBUTE_REPNOTIFY(UAuraAttributeSet, Resilience, OldResilience);
}
void UAuraAttributeSet::OnRep_Vigor(const FGameplayAttributeData& OldVigor) const
{
GAMEPLAYATTRIBUTE_REPNOTIFY(UAuraAttributeSet, Vigor, OldVigor);
}
.
.
.
위와 같이 Attribute에 RPG 게임에서 사용할 법한 새로운 능력치들을 추가하였습니다.
이제 PlayerState로 넘어가서 새로 추가된 Attribute를
Data Table로 초기화하기 위한 설정을 진행하겠습니다.
2) AuraPlayerState
UCLASS()
class AURA_API AAuraPlayerState : public APlayerState, public IAbilitySystemInterface
{
.
.
.
protected:
/*
* GAS Section
*/
UPROPERTY(VisibleAnywhere)
TObjectPtr<UAbilitySystemComponent> AbilitySystemComponent;
.
.
.
};
기존에 감춰져 있던 ASC를 VisibleAnywhere로 설정하여 에디터에서 설정을 수행하도록 변경하였습니다.
3) 언리얼 에디터
위와 같이 새로운 AttributeMetaData를 만들겠습니다.
설정은 다음과 같이 구성하였습니다.
그리고 PlayerState의 블루 프린트에서 생성한 AttributeMetaData를 설정해주겠습니다.
최종실행결과는 다음과 같습니다.
기존에 설정한 Attribute와 중복되어 보여지고 있지만.
문제없이 Attribute가 초기화된 것을 확인할 수 있습니다.
728x90
반응형
'언리얼 > 게임 프로젝트' 카테고리의 다른 글
GameplayAbilitySystem을 이용한 RPG 프로젝트 - (31) GE의 모디파이어_Attribute Based 파헤치기 01 (0) | 2025.01.24 |
---|---|
GameplayAbilitySystem을 이용한 RPG 프로젝트 - (30) GE를 통해 Attribute 초기화하기 (0) | 2025.01.24 |
Lyra 클론코딩 - (10 - 1) Input_01 (0) | 2025.01.23 |
다커 앤 다커 모작 - 6일차_아이템 #11 (0) | 2025.01.23 |
다커 앤 다커 모작 - 6일차_아이템 #10 (0) | 2025.01.23 |