위젯에서 직접 PlayerState, AbilitySystemComponent등에 접근하면 강한 의존성과 UI 재사용성 저하 문제가 발생한다
-> UI와 데이터 게층을 분리해여 UI는 컨트롤러에게만 의존하고 컨트롤러는 실제 데이터에 접근하게 한다.
델리게이트 = 이벤트 신호 시스템(일종의 콜백 함수 리스트)
언리얼에서는 UI에서 많이 사용되며 컨트롤러->위젯으로 데이터 전달 시 직접 접근 없이 동작을 트리거 할 수 있다.
델리게이트 선언(헤더파일)
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnHealthChangedSignature, float, NewHealth);
UPROPERTY(BlueprintAssignable, Category="GAS|Attributes")
FOnHealthChangedSignature OnHealthChanged;
-> 위젯에서는 Assign OnHealthChanged로 바인딩 가능
델리게이트 사용(cpp파일)
void UOverlayWidgetController::BroadcastInitialValues()
{
const UAuraAttributeSet* AuraAttributeSet = CastChecked<UAuraAttributeSet>(AttributeSet);
OnHealthChanged.Broadcast(AuraAttributeSet->GetHealth());
OnMaxHealthChanged.Broadcast(AuraAttributeSet->GetMaxHealth());
}