https://docs.unrealengine.com/5.3/ko/umg-viewmodel/
https://beomy.tistory.com/43
View Model : View를 표현하기 위해 만든 View를 위한 Model. View에 전달하기 위한 데이터 처리 절차 포함
View마다 ViewModel을 만든다면 View와 독립적인 단일 Model을 유지할 수 있는 구조인 듯
ViewModel에 변수나 함수를 정의한 후 View와 Binding
일종의 Getter 함수
1. pure 함수
2. const
3. 1개의 값 반환
4. 입력 매개변수 없음
INotifyFieldValueChanged를 구현하던가 UMVVMViewModelBase 확장
ViewModel System에서 변수와 함수에 Access하려면 Blueprint에서도 Access 가능해야 함
FieldNotify 지정자 필요
Custom Getter와 Setter는 변수를 얻기 전에 연산이 필요한 경우나 다른 함수를 트리거 할 때 또는 변수를 설정하면서 다른 변수를 업데이트 하는 경우 사용
단, UPROPERTY를 통해 기본 Getter와 Setter 제공
ViewModel에서 배열에 직접 접근할 수 없으므로 배열 사용 시 FieldNotify 함수 필요
FieldNotify를 Broadcast하는 Custom Method
다른 변수에서 파생된 데이터 또는 바인딩은 지원하지만 변수를 따로 생성하는 것을 원치 않을 경우 사용
Broadcast는 Macro를 통해 전파
Widget마다 View Model 생성
함수 이름을 프로퍼티 경로로 사용
MVVM SubSystem에서 Global하게 접근할 수 있는 View Model의 목록
Game Option같이 UI를 통해 접근해야 하는 변수처리에 적합
View Model 중첩 가능
View Model을 작게 분리하여 디버깅용 테스트 데이터로 가볍게 사용 가능
https://docs.unrealengine.com/5.3/ko/common-ui-plugin-for-advanced-user-interfaces-in-unreal-engine/
다중 Layer Inteface와 크로스 플랫폼에 적용하기 좋은 Plugin
선택적 Interaction 구현
주어진 시간에 특정 위젯만 입력 수신 가능
위젯을 노드로 변환하여 논리적 비주얼 계층구조를 따라 입력 라우팅 처리
입력을 처리할 수 있는 위젯
현재 노드의 위젯을 비활성화 하면 그 하단 노드 위젯들이 모두 비활성화 되면서 뒤로가기같은 경우 적합한 엘리먼트로 돌아갈 수 있음
Unity의 Input System과 비슷한 방식으로 Input과 Action 중간에 Adapter를 배치한 구조인 듯
Synthetic Cursor의 경우 CommonUI가 Slate Application에 적합한 Input으로 변환한 후 일반적인 Analog Cursor와 동일한 절차를 거치는 구조인 듯
일단 전체를 읽어본 결과 UI라기보다는 Cross Platform Input과 UI의 연동에 대한 이야기가 주인거같은데.. 직접 해봐야 알 수 있을거같고 Input도 읽어봐야 할 듯