0. 개요
이전 포스트에서 람다 식을 이용해 태그를 순회하여 값을 꺼내오도록 바인딩 했었다.
이제 위젯 컨트롤러 내의 콜백 함수를 모두 람다 식으로 대체할 것이다.
1. 콜백 함수를 람다 식으로 대체하기
void UOverlayWidgetController::BindCallbacksToDependencies()
{
const UAuraAttributeSet* AuraAttributeSet = CastChecked<UAuraAttributeSet>(AttributeSet);
AbilitySystemComponent->GetGameplayAttributeValueChangeDelegate(
AuraAttributeSet->GetHealthAttribute()).AddLambda(
[this](const FOnAttributeChangeData& Data)
{
OnHealthChanged.Broadcast(Data.NewValue);
}
);
AbilitySystemComponent->GetGameplayAttributeValueChangeDelegate(
AuraAttributeSet->GetMaxHealthAttribute()).AddLambda(
[this](const FOnAttributeChangeData& Data)
{
OnMaxHealthChanged.Broadcast(Data.NewValue);
}
);
AbilitySystemComponent->GetGameplayAttributeValueChangeDelegate(
AuraAttributeSet->GetManaAttribute()).AddLambda(
[this](const FOnAttributeChangeData& Data)
{
OnManaChanged.Broadcast(Data.NewValue);
}
);
AbilitySystemComponent->GetGameplayAttributeValueChangeDelegate(
AuraAttributeSet->GetMaxManaAttribute()).AddLambda(
[this](const FOnAttributeChangeData& Data)
{
OnMaxManaChanged.Broadcast(Data.NewValue);
}
);
기존에 바인딩 했던 콜백 함수는 모두 제거한다.
2. 여러 개의 델리게이트를 하나로 통일하기
(1) 코드 수정
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnHealthChangedSignature, float, NewHealth);
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnMaxHealthChangedSignature, float, NewMaxHealth);
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnManaChangedSignature, float, NewMana);
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnMaxManaChangedSignature, float, NewMaxMana);
기존에 float 값들을 각 속성마다 하나의 델리게이트를 선언했었다.
이제 하나의 델리게이트를 사용하도록 한다.
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnAttributeChangedSignature, float, NewValue);
UPROPERTY(BlueprintAssignable, Category="GAS|Attributes")
FOnAttributeChangedSignature OnHealthChanged;
UPROPERTY(BlueprintAssignable, Category="GAS|Attributes")
FOnAttributeChangedSignature OnMaxHealthChanged;
UPROPERTY(BlueprintAssignable, Category="GAS|Attributes")
FOnAttributeChangedSignature OnManaChanged;
UPROPERTY(BlueprintAssignable, Category="GAS|Attributes")
FOnAttributeChangedSignature OnMaxManaChanged;
(2) 오류 수정
델리게이트를 변경했기 때문에 블루프린트에 연결된 노드도 전부 수정해야 한다.
로그의 노드를 클릭해서 블루프린트로 바로 이동해서 수정한다.
각 이벤트의 델리게이트를 변경했기 때문에 노드를 제거하고 다시 바인딩하면 오류가 사라진다.
WBP_ManaGlobe의 마나 쪽도 같이 수정한다.
'UE 5 스터디 > Gameplay Ability System(GAS)' 카테고리의 다른 글
6-1. 데이터 테이블로 속성 값 초기화(Initialize), 1차 속성(Primary Attributes) (0) | 2024.09.04 |
---|---|
5-14. 체력 감소 버그 수정 - 속성 값 클램핑 (1) | 2024.09.03 |
5-12. UI - (5) 위젯 블루프린트에 애니메이션 적용 (0) | 2024.09.02 |
5-11. UI - (4) 메세지 위젯 생성 (0) | 2024.09.02 |
5-10. UI - (3) 데이터 테이블 행을 위젯에 전달하기 (0) | 2024.09.02 |