1. 위젯컨트롤러 > 델리게이트 선언, 변수만들기
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FMessageWidgetRowSignature, FUIWidgetRow, Row);
UPROPERTY(BlueprintAssignable, Category="GAS|Messages")
FMessageWidgetRowSignature MessageWidgetRowDelegate;
2. 위젯컨트롤러.cpp > 람다함수에서 방송
MessageWidgetRowDelegate.Broadcast(*Row);
* 문제 : Msg태그가 아닌 다른태그가 있는경우?
* 해결 : 이기능을, 메시지태그가 있는경우만 실행되도록 제한
* MatchesTag라는 좋은함수가 만들어져있다.
Message로 시작하는 태그일때만 true
// * "A.1".MatchesTag("A") will return True, "A".MatchesTag("A.1") will return False
//FGameplayTag::MatchesTag()
Tag.MatchesTag(FGameplayTag::RequestGameplayTag(FName("Message")));
3. 리팩토링 // Message로 시작하는 태그일때만 동작
Cast<UAuraAbilitySystemComponent>(AbilitySystemComponent)->EffectAssetTags.AddLambda(
[this](const FGameplayTagContainer& AssetTags)
{
for (const FGameplayTag& Tag : AssetTags)
{
// * "A.1".MatchesTag("A") will return True, "A".MatchesTag("A.1") will return False
if(Tag.MatchesTag(FGameplayTag::RequestGameplayTag(FName("Message")))) //Message로 시작하는 태그인지 검사
{
//태그별로 데이터 가져오기
const FUIWidgetRow* Row = GetDataTableRowByTag<FUIWidgetRow>(MessageWidgetDataTable, Tag);
MessageWidgetRowDelegate.Broadcast(*Row);
}
}
}
);
4. Add(구독)는 BP에서 할거임.
위젯(WBP_Overlay)에서 구독해줘야함!
위젯에서 위젯컨트롤러를 사용해서 구독하는 형식인듯?
i) 위젯컨트롤러를 내가만든위젯컨트롤러로 캐스팅
ii) 컨트롤러에서 구독
iii) Row에 데이터들이 있는데, 이를 break(나눠서) 해서 사용할수 있다.
5. 결과
우리는 화면에 많은 정보(태그,메세지, 이미지 등) 들을 표시가능하게 되었음!
'UE5 > GameplayTags' 카테고리의 다른 글
[UE5] 메세지 위젯 애니메이션 구현 // .8초후 사라짐 (0) | 2024.06.04 |
---|---|
[UE5] 메세지 위젯 디자인, 뷰포트에 띄우기 (0) | 2024.06.04 |
[UE5] GETag 정보저장소 만들기 // 위젯컨트롤러에서 DT정보가져오기 구현 (0) | 2024.06.03 |
[UE5] GE태그 방송하기 , 람다함수 (0) | 2024.06.03 |
[UE5] 이펙트실행되면, 모든태그가져오기 (0) | 2024.06.03 |