0. 개요

이전 포스트에서 가져온 데이터 테이블 행의 값들을 위젯으로 전달한다.

델리게이트, 바인딩, 브로드캐스트를 이용한다.

 

 

1. 델리게이트 생성

(1) 델리게이트 선언

DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FMessageWidgetRowSignature, FUIWidgetRow, Row);

struct를 include 하단에 위치해야 참조 오류가 발생하지 않는다.

델리게이트를 동적 바인딩으로 선언해야 블루프린트에서 사용할 수 있다.

 

이제 델리게이트를 블루프린트에서 바인딩한다.

UPROPERTY(BlueprintAssignable, Category="GAS|Messages")
FMessageWidgetRowSignature MessageWidgetRowDelegate;

 

 

(2) 람다 함수 수정

    Cast<UAuraAbilitySystemComponent>(AbilitySystemComponent)->EffectAssetTags.AddLambda(
        [this](const FGameplayTagContainer& AssetTags)
        {   /* 멤버 변수에 접근하려면 캡쳐 */
            for (const FGameplayTag& Tag : AssetTags)
            {
                // Tag = Massage.HealthPotion
                // "Message.HealthPotion".MatchesTag("Message")는 True
                // "Message".MatchesTag("Message.HealthPotion")는 False
                // 매개변수로 전달된 태그가 전부 같아야 함
                FGameplayTag MessageTag = FGameplayTag::RequestGameplayTag(FName("Message"));
                if (Tag.MatchesTag(MessageTag))
                {
                    FUIWidgetRow* Row = GetDataTableRowByTag<FUIWidgetRow>(MessageWidgetDataTable, Tag);
                    MessageWidgetRowDelegate.Broadcast(*Row);
                }
            }
        }
    );

MatchesTag 함수를 사용해서 에셋 태그가 Message 태그일 때만 MessageWidgetRowDelegate가 발동하도록 지정한다.

 

 

2. 오버레이 위젯 블루프린트 수정

(1) 오버레이 위젯 컨트롤러 가져오기

기존에 사용하던 위젯 컨트롤러를 캐스팅하여 오버레이 위젯 컨트롤러로 형변환 하여 사용한다.

 

(2) 위젯 연결

기존에 HUD 상 위젯과 컨트롤러를 연결하던 부분이다.

 

(3) 메세지 바인딩

오버레이 위젯 컨트럴로의 델리게이트에 이벤트를 바인딩한다.

이벤트에서 Row를 분해하여 4가지 정보를 가져올 수 있다.