[UE5] Attribute Info 델리게이트 // 위젯에 데이터 (속성명, 값) 연결하기
* 우리는 구조체 정보를 방송할거임
1. 델리게이트 선언(다이나믹 : BP에서 이용 / 멀티캐스트 : 다수에게방송)
2. 델리게이트 변수로 선언
#include "CoreMinimal.h"
#include "UI/WidgetController/AuraWidgetController.h"
#include "AttributeMenuWidgetController.generated.h"
struct FAuraAttributeInfo;
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FAttributeInfoSignature, const FAuraAttributeInfo&, Info);
/**
*
*/
UCLASS(BlueprintType, Blueprintable)
class AURA_API UAttributeMenuWidgetController : public UAuraWidgetController
{
GENERATED_BODY()
public:
virtual void BindCallbacksToDependencies() override; //의존성바인딩
virtual void BroadcastInitialValues() override; //초기값방송
UPROPERTY(BlueprintAssignable,Category="GAS|Attributes")
FAttributeInfoSignature AttributeInfoDelegate;
};
이제 AttributeInfo 를 방송할수 있다.
우리는 AuraAttributeInfo 타입을 방송중임 -> 그 정보가 필요함 -> Data Asset에서 만들어놓음! -> 변수추가
protected:
UPROPERTY(EditDefaultsOnly)
TObjectPtr<UAttributeInfo> AttributeInfo;
//class AURA_API UAttributeInfo : public UDataAsset
DA에서 우리가 구현한find함수이용 => Info를 set한후 방송하기
void UAttributeMenuWidgetController::BroadcastInitialValues()
{
UAuraAttributeSet* AS = CastChecked<UAuraAttributeSet>(AttributeSet); //부모인 위젯컨트롤러가 갖고있음
check(AttributeInfo) //DA가 set되었는지 확인
FAuraAttributeInfo Info = AttributeInfo->FindAttributeInfoForTag(FAuraGameplayTags::Get().Attributes_Primary_Strength); //일치태그 정보를 리턴
Info.AttributeValue=AS->GetStrength(); //속성정보 set 완료, value는 직접넣기로 설계함
AttributeInfoDelegate.Broadcast(Info); //set완료후 방송해야함
}
* BP에서 할일
여기 DA에 의존성 주입
protected:
UPROPERTY(EditDefaultsOnly)
TObjectPtr<UAttributeInfo> AttributeInfo; //class AURA_API UAttributeInfo : public UDataAsset
델리게이트에 바인딩
AttributeInfoDelegate.Broadcast(Info); //set완료후 방송해야함
* 고려사항
각각 속성행에 Str, Int 등 태그를 추가해줘야함
그런데, 자식에서 정보접근불가 -> 부모(textrow)에 들어가서 set함수 만들어줌
* 플레이누르면 바뀔까? No
원인 : 브로드캐스트 초기값 value 함수를 콜해야함 //즉, 방송을 안해줬음 ㅋㅋ
그러나, 우리가만든애는 blueprintcllable 함수가아님
-> 부모 찾아가서 blueprintcallable 달아주면됨
virtual void BroadcastInitialValues() override; //초기값방송
class AURA_API UAuraWidgetController : public UObject
{
GENERATED_BODY()
public:
...
//속성들 방송하는 함수
UFUNCTION(BlueprintCallable)
virtual void BroadcastInitialValues();
* 왜 올str임?
원인 : 아래에서 힘만 set했기 때문
* 일단 value를 먼저 수정하기로함
마찬가지로 부모(textValueRow)에 Setter를 만들어주고, info를 인자로 전달하면됨!
* 할일 : 각각 행에 대해 태그를 확인한후, 진행하면 속성별 태그가 될것임