* 우리는 구조체 정보를 방송할거임
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를 인자로 전달하면됨!
* 할일 : 각각 행에 대해 태그를 확인한후, 진행하면 속성별 태그가 될것임
'UE5 > Attribute Menu' 카테고리의 다른 글
[UE5] 속성변경시 위젯에 즉시반영 구현 (0) | 2024.06.08 |
---|---|
[UE5] 속성행에 GE태그 연결, 속성추가시 AS코드만 수정 // 함수포인터 사용방법 (0) | 2024.06.08 |
[UE5] 메뉴 위젯 컨트롤러 구현, BP내 사용가능한 위젯컨트롤러 게터 만들기, BP 상속안될때 해결방법, MVC 정리 (0) | 2024.06.08 |
[UE5] 속성정보 관련(구조체,탐색) 클래스구현, 속성입력 (0) | 2024.06.08 |
[UE5] 위젯에 실제 데이터 바인딩 구현1, cpp에서 태그추가-조회 (0) | 2024.06.07 |