본문 바로가기

게임프로그래밍/실습2

[실습2] 34. 어트리뷰트 정보를 담은 데이터 에셋 만들기

1. Attribute Info Data Asset

 

어트리뷰트의 정보를 게임플레이 태그 등과 연결한뒤 위젯에 그정보를 넘기기 위해 데이터 에셋을 만들 것이다.

 

 

어트리뷰트 데이터는 구조체에 담아 저장해보자.

 

USTRUCT(BlueprintType)
struct FAuraAttributeInfo
{
    GENERATED_BODY()

    UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
    FGameplayTag AttributeTag = FGameplayTag();
    
    UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
    FText AttributeName = FText();

    UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
    FText AttributeDescription = FText();

    UPROPERTY(BlueprintReadOnly)
    float AttributeValue = 0.f;
    
};

 

이 구조체는 차후에 브로드캐스트할때 보낼 정보이다.

 

이제 이 구조체를 채울 수 있어야 할것이다.

 

UCLASS()
class PRACTICE2_API UAttributeInfo : public UDataAsset
{
    GENERATED_BODY()

public:
    FAuraAttributeInfo FindAttributeInfoForTag(const FGameplayTag& AttributeTag, const bool bLogNotFound = false) const;
    
    UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
    TArray<FAuraAttributeInfo> AttributeInformation;
};

 

배열을 채우는 것은 블루프린트에서 할 것이다. c++에서는 함수만 구현하도록 하자.

 

FAuraAttributeInfo UAttributeInfo::FindAttributeInfoForTag(const FGameplayTag& AttributeTag, const bool bLogNotFound) const
{
    for (const FAuraAttributeInfo& Info : AttributeInformation)
    {
       if (Info.AttributeTag.MatchesTagExact(AttributeTag))
       {
          return Info;
       }
    }

    if (bLogNotFound)
    {
       UE_LOG(LogTemp, Error, TEXT("Can't find Info for AttributeTag [%s] on AttributeInfo [%s]."), *AttributeTag.ToString(), *GetNameSafe(this));
    }

    return FAuraAttributeInfo();
}

 

구조체를 순회하여 해당 태그를 가진 구조체가 있는지 확인하다. 이제 실제 데이터 에셋을 만들어 채우도록 하자.

 

 

데이터 에셋 블루프린트를 만들었다. 이제 이 배열들을 채우면 될 것이다.