Widget은 WidgetController의 참조을 가지고 있다.
WidgetController는 Widget의 참조을 가지고 있지 않다.
대신 WidgetController은 PlayerController, PlayerState, AbilitySystemCompoment, AttributeSet의 참조을 가지고 있다.
그래서 AttributeSet의 속성 값들이 갱신 된다면 WidgetController의 브로드캐스트 함수 호출을 통해
WidgetController가 가지고 있는 델리게이트들을 실행시켜 주면 된다.
그리고 이 WidgetController의 델리게이트들에 바인딩 처리되는 로직은 Widget에 있다.
WidgetController의 델리게이트 멤버들이 public이므로 Widget함수에서 WidgetController의 델리게이트들을 꺼내어 자신의 위젯 갱신 함수에 바인딩 처리을 한다.
아래 이미지은 HealthWidget에서 WidgetController의 OnHealthChanged와 OnMaxHealthChanged 델리게이트에 자신을 갱신하는 로직을 바인딩한 로직이다.
보통은 컨트롤러가 제어자 이므로 컨트롤러의 함수에서 참조하고 있는 위젯의 함수을 호출하여 위젯의 상태를 갱신하는데 이 예제의 경우 단순히 컨트롤러의 델리게이트만 노출시키고 위젯들이 알아서 바인딩하여 사용하도록 하고 있다.
'Unreal' 카테고리의 다른 글
AttributeSet이 변경되면 자동 호출되는 함수들~ (0) | 2023.12.16 |
---|---|
블루프린트에서 SafeDivide 노드은 분모가 0이면 값을 0으로 반환해 준다. (0) | 2023.12.14 |
Unreal에서 GPU LightMass 사용하기 (0) | 2023.12.13 |
Unreal에서 셰이더 컴파일 속도 높이기 (0) | 2023.12.13 |
Unreal의 위젯 블루프린트에서 여러 위젯들을 겹쳐 쌓아서 출력하고 싶다면 먼저 오버레이(Overlay)을 추가해 주어야 한다. (0) | 2023.12.12 |