AttributeSet 생성
AttributeSet을 상속받아 PPCharacterAttributeSet을 만든다
PPCharacterAttributeSet 헤더파일
#pragma once
#include "CoreMinimal.h"
#include "AttributeSet.h"
#include "AbilitySystemComponent.h"
#include "PPCharacterAttributeSet.generated.h"
#define ATTRIBUTE_ACCESSORS(ClassName, PropertyName) \
GAMEPLAYATTRIBUTE_PROPERTY_GETTER(ClassName, PropertyName) \
GAMEPLAYATTRIBUTE_VALUE_GETTER(PropertyName) \
GAMEPLAYATTRIBUTE_VALUE_SETTER(PropertyName) \
GAMEPLAYATTRIBUTE_VALUE_INITTER(PropertyName)
/**
*
*/
UCLASS()
class PROJECT_P_API UPPCharacterAttributeSet : public UAttributeSet
{
GENERATED_BODY()
public:
UPPCharacterAttributeSet();
//#include "AbilitySystemComponent.h" 추가
ATTRIBUTE_ACCESSORS(UPPCharacterAttributeSet, AttackRange);
ATTRIBUTE_ACCESSORS(UPPCharacterAttributeSet, MaxAttackRange);
ATTRIBUTE_ACCESSORS(UPPCharacterAttributeSet, AttackRadius);
ATTRIBUTE_ACCESSORS(UPPCharacterAttributeSet, MaxAttackRadius);
ATTRIBUTE_ACCESSORS(UPPCharacterAttributeSet, AttackRate);
ATTRIBUTE_ACCESSORS(UPPCharacterAttributeSet, MaxAttackRate);
ATTRIBUTE_ACCESSORS(UPPCharacterAttributeSet, Health);
ATTRIBUTE_ACCESSORS(UPPCharacterAttributeSet, MaxHealth);
ATTRIBUTE_ACCESSORS(UPPCharacterAttributeSet, Damage);
protected:
UPROPERTY(BlueprintReadOnly, Category = "Attack", Meta = (AllowPrivateAccess = true))
FGameplayAttributeData AttackRange;
UPROPERTY(BlueprintReadOnly, Category = "Attack", Meta = (AllowPrivateAccess = true))
FGameplayAttributeData MaxAttackRange;
UPROPERTY(BlueprintReadOnly, Category = "Attack", Meta = (AllowPrivateAccess = true))
FGameplayAttributeData AttackRadius;
UPROPERTY(BlueprintReadOnly, Category = "Attack", Meta = (AllowPrivateAccess = true))
FGameplayAttributeData MaxAttackRadius;
UPROPERTY(BlueprintReadOnly, Category = "Attack", Meta = (AllowPrivateAccess = true))
FGameplayAttributeData AttackRate;
UPROPERTY(BlueprintReadOnly, Category = "Attack", Meta = (AllowPrivateAccess = true))
FGameplayAttributeData MaxAttackRate;
UPROPERTY(BlueprintReadOnly, Category = "Health", Meta = (AllowPrivateAccess = true))
FGameplayAttributeData Health;
UPROPERTY(BlueprintReadOnly, Category = "Health", Meta = (AllowPrivateAccess = true))
FGameplayAttributeData MaxHealth;
UPROPERTY(BlueprintReadOnly, Category = "Attack", Meta = (AllowPrivateAccess = true))
FGameplayAttributeData Damage;
bool bIsDead = false;
protected:
virtual bool PreGameplayEffectExecute(struct FGameplayEffectModCallbackData& Data) override;
virtual void PostGameplayEffectExecute(const struct FGameplayEffectModCallbackData& Data) override;
virtual void PreAttributeChange(const FGameplayAttribute& Attribute, float& NewValue) override;
};
- #define ATTRIBUTE_ACCESSORS(ClassName, PropertyName) \
GAMEPLAYATTRIBUTE_PROPERTY_GETTER(ClassName, PropertyName) \
GAMEPLAYATTRIBUTE_VALUE_GETTER(PropertyName) \
GAMEPLAYATTRIBUTE_VALUE_SETTER(PropertyName) \
GAMEPLAYATTRIBUTE_VALUE_INITTER(PropertyName)- 부모 클래스 UAttributeSet에 있는 매크로 함수들
- ATTRIBUTE_ACCESSORS(어트리뷰트셋, 어트리뷰트)
- Get, Set, Init 함수들을 만들어 줌
- #include "AbilitySystemComponent.h" 추가
- 사용 예) Get + 어트리뷰트 이름, GetHealth, SetHealth, InitHealth
- UPPCharacterAttributeSet();
- 생성자
- ATTRIBUTE_ACCESSORS(UPPCharacterAttributeSet, AttackRange);
- 각 어트리뷰트 마다 매크로를 통하여 Get, Set Init함수를 생성
- UPROPERTY(BlueprintReadOnly, Category = "Attack", Meta = (AllowPrivateAccess = true))
FGameplayAttributeData AttackRange;- 어트리뷰트 생성
- virtual bool PreGameplayEffectExecute(struct FGameplayEffectModCallbackData& Data) override;
- GameplayEffect로 어트리뷰트 수정 전 실행되는 함수
- 활용 예) 캐릭터가 무적상태일 경우 return false를 해 어트리뷰트 수정을 못하게 할 수 있음
- virtual void PostGameplayEffectExecute(const struct FGameplayEffectModCallbackData& Data) override;
- GameplayEffect로 어트리뷰트 수정 후 실행되는 함수
- virtual void PreAttributeChange(const FGameplayAttribute& Attribute, float& NewValue) override;
- 어트리뷰트를 직접적으로 수정할때 실행되는 함수
Cpp파일
생성자
UPPCharacterAttributeSet::UPPCharacterAttributeSet() :
AttackRange(100.0f), MaxAttackRange(300.0f),
AttackRadius(50.0f), MaxAttackRadius(150.0f),
AttackRate(30.0f), MaxAttackRate(100.0f),
MaxHealth(100.0f), Damage(0)
{
InitHealth(GetMaxHealth());
}
생성한 어트리뷰트들 초기화
'포트폴리오 제작 > Project_P' 카테고리의 다른 글
Project_P GE를 사용하여 데미지 전달 및 체력 감소 (0) | 2024.10.18 |
---|---|
Project_P AttributeSet을 캐릭터에 생성하기 (0) | 2024.10.16 |
Project_P 캐릭터에 구현된 Move함수 실행시 GameplayTag 부여 (0) | 2024.10.04 |
Project_P 공격 판정 구현(4) TA 타겟액터 구현 (0) | 2024.09.11 |
Project_P 공격 판정 구현(3) Trace 어빌리티 태스크 생성 (0) | 2024.09.06 |