본문 바로가기
포트폴리오 제작/Project_P

Project_P AttributeSet을 캐릭터에 생성하기

by k99812 2024. 10. 16.

플레이어 캐릭터에 AttributeSet 생성


플레이어 캐릭터의 경우 캐릭터에 대한 정보를 플레이어 캐릭터에 직접적으로 생성하지 않고(멀티플레이이를 고려)

PlayerState 클래스에 생성한다

 

PlayerState 헤더파일

#include "CoreMinimal.h"
#include "GameFramework/PlayerState.h"
#include "AbilitySystemInterface.h"
#include "PPGASPlayerState.generated.h"

/**
 * 
 */
UCLASS()
class PROJECT_P_API APPGASPlayerState : public APlayerState, public IAbilitySystemInterface
{
	GENERATED_BODY()
	
public:
	APPGASPlayerState();

	virtual UAbilitySystemComponent* GetAbilitySystemComponent() const override;

protected:
	UPROPERTY(EditAnywhere, Category = GAS)
	TObjectPtr<class UAbilitySystemComponent> ASC;

	UPROPERTY(VisibleAnywhere, Category = AttributeSet)
	TObjectPtr<class UPPCharacterAttributeSet> AttributeSet;
};

 

  • UPROPERTY(VisibleAnywhere, Category = AttributeSet)
    TObjectPtr<class UPPCharacterAttributeSet> AttributeSet;
    • 어트리뷰트셋 생성

Cpp파일

APPGASPlayerState::APPGASPlayerState()
{
	ASC = CreateDefaultSubobject<UAbilitySystemComponent>(TEXT("ASC"));
	AttributeSet = CreateDefaultSubobject<UPPCharacterAttributeSet>(TEXT("AttributeSet"));
}

 

생성자에서 CreateDefaultSubobject 함수로 인스턴스를 생성한다

 

AttributeSet 의 경우 별도로 ASC에 추가하지 않아도 자동으로 ASC에 등록이 된다

(ASC의 코드에서 AttributeSet을 초기화함)

 

몬스터에 AttributeSet 생성


직접 조종을 하지 않는 몬스터에 경우 몬스터 클래스에 직접 어트리뷰트셋을 생성한다

 

몬스터 클래스의 상위 클래스인 APPGASCharacterNonPlayer에 생성을 하였음

 

APPGASCharacterNonPlayer 헤더파일

#include "CoreMinimal.h"
#include "Character/PPCharacterBase.h"
#include "AbilitySystemInterface.h"
#include "PPGASCharacterNonPlayer.generated.h"

/**
 * 
 */
UCLASS()
class PROJECT_P_API APPGASCharacterNonPlayer : public APPCharacterBase, public IAbilitySystemInterface
{
	GENERATED_BODY()
	
public:
	APPGASCharacterNonPlayer();

	virtual UAbilitySystemComponent* GetAbilitySystemComponent() const override;

	virtual void PossessedBy(AController* NewController) override;

protected:
	UPROPERTY(EditAnywhere, Category = GAS)
	TObjectPtr<class UAbilitySystemComponent> ASC;

	UPROPERTY(VisibleAnywhere, Category = AttributeSet)
	TObjectPtr<class UPPCharacterAttributeSet> AttributeSet;

};

 

  • UPROPERTY(VisibleAnywhere, Category = AttributeSet)
    TObjectPtr<class UPPCharacterAttributeSet> AttributeSet;
    • 어트리뷰트셋 생성

Cpp 파일

APPGASCharacterNonPlayer::APPGASCharacterNonPlayer()
{
	ASC = CreateDefaultSubobject<UAbilitySystemComponent>(TEXT("ASC"));
	AttributeSet = CreateDefaultSubobject<UPPCharacterAttributeSet>(TEXT("AttributeSet"));
}

 

생성자에서 어트리뷰트셋의 인스턴스를 생성해준다