본문 바로가기
Unreal

Widget와 WidgetController의 연동

by myroad 2023. 12. 15.

Widget은 WidgetController의 참조을 가지고 있다.
WidgetController는 Widget의 참조을 가지고 있지 않다.
대신 WidgetController은 PlayerController, PlayerState, AbilitySystemCompoment, AttributeSet의 참조을 가지고 있다.

그래서 AttributeSet의 속성 값들이 갱신 된다면 WidgetController의 브로드캐스트 함수 호출을 통해
WidgetController가 가지고 있는 델리게이트들을 실행시켜 주면 된다.
그리고 이 WidgetController의 델리게이트들에 바인딩 처리되는 로직은 Widget에 있다.
WidgetController의 델리게이트 멤버들이 public이므로 Widget함수에서 WidgetController의 델리게이트들을 꺼내어 자신의 위젯 갱신 함수에 바인딩 처리을 한다.

 

아래 이미지은 HealthWidget에서 WidgetController의 OnHealthChanged와 OnMaxHealthChanged 델리게이트에 자신을 갱신하는 로직을 바인딩한 로직이다.

보통은 컨트롤러가 제어자 이므로 컨트롤러의 함수에서 참조하고 있는 위젯의 함수을 호출하여 위젯의 상태를 갱신하는데 이 예제의 경우 단순히 컨트롤러의 델리게이트만 노출시키고 위젯들이 알아서 바인딩하여 사용하도록 하고 있다.