관리 메뉴

Mini

[UE5] DT행 방송하기 // 위젯에 정보 가져오기 본문

UE5/GameplayTags

[UE5] DT행 방송하기 // 위젯에 정보 가져오기

Mini_96 2024. 6. 4. 00:10

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. 결과

우리는 화면에 많은 정보(태그,메세지, 이미지 등) 들을 표시가능하게 되었음!

 

https://github.com/DongHoonYu96/GameplayAbilitySystem_Aura/commit/8e114ca955b2567f397b6f9578aabe93125070bc

 

feat : 위젯에 정보 가져오기 구현 · DongHoonYu96/GameplayAbilitySystem_Aura@8e114ca

Bisu96 committed Jun 3, 2024

github.com