유저 인터페이스는 입력 액션을 화면상의 버튼에 매핑할 수 있습니다. 예를 들면 게임패드의 좌상단 및 우상단 버튼을 사용하여 다수의 탭이 있는 옵션 메뉴의 여러 탭 사이를 토글할 수 있습니다. 이런 상호작용은 컨텍스트에 따라 크게 달라지므로 범용 UI에는 일반 바운드 액션 바(Common Bound Action Bar) 라는 위젯이 포함되어 있습니다. 이 위젯은 현재 활성 UI에 있는 모든 입력 액션을 쉽게 참조되는 단일 위치에 표시합니다. 일반적으로 이 위젯은 화면 하단에 걸쳐 배치됩니다.
CommonBoundActionBar / NavBar의 작동 방식
UCommonBoundActionBar 는 틱마다 업데이트됩니다. 최종 바 업데이트는 UCommonBoundActionBar::HandleDeferredDisplayUpdate 함수에서 구현됩니다. true 로 설정된 bDisplayInActionBar 프로퍼티가 있는 입력 액션이 수집, 정렬된 다음 표시를 위해 목록에 추가됩니다.
이 업데이트는 액션 라우터(Action Router) 델리게이트 _UCommonUIActionRouterBase::OnBoundActionsUpdated_ 에 바인딩되고, 범용 UI의 다양한 노드 변경점 도중에 실행됩니다. 노드 변경은 위젯이 활성화 또는 비활성화될 때마다 발생하므로 사용 가능한 액션 변경을 트레이스하기에 최적의 포인트입니다.
그러나 UCommonUIActionRouterBase 는 로컬 플레이어 서브시스템이므로 틱을 로컬 플레이어에 의존합니다. 즉, 게임이 메뉴 표시를 위해 틱을 일시정지할 때 UICommonBoundActionBar 가 플레이어의 틱 프로세스에 의존하기 때문에 사용 가능한 범용 UI 액션 변경에 따라 동적으로 업데이트되지 않습니다.
모든 액션이 액션 바에 추가되는 것은 아니며, 그럴 필요도 없습니다. FBindUIActionArgs::bDisplayInActionBar 는 입력 액션이 액션 바에 추가되는지 여부를 결정합니다. 이는 액션 바에 표시(Display In Action Bar) 세팅을 통해 블루프린트에서 노출되며 C++에서 UCommonUserWidget::bDisplayInActionBar 를 사용하여 액세스할 수도 있습니다.
가능한 임시방편 중 하나로, 플레이어 상호작용 또는 UI를 소유한 액터나 로컬 플레이어를 위해 일시정지한 동안 틱을 활성화할 수 있습니다. 또한 위젯의 서브클래스를 만들고 일시정지 시 틱 가능하게 설정할 수도 있습니다.
UI에 CommonBoundActionBar 구현
일반 바운드 액션 바를 구성하려면 다음을 수행합니다.
-
CommonBoundActionBar를 위젯 블루프린트에 추가합니다. 콘텐츠 샘플 프로젝트에서는 CommonUI_ActivatableWidgetsKB 화면 하단에 고정합니다. 이 위젯은 ExampleContent > UMG > CommonUI > ActivatableWidgetsKB 에서 찾을 수 있습니다.
-
UCommonBoundActionButton에서 파생되는 클래스를 생성합니다. 콘텐츠 샘플 프로젝트에서는 이 위젯을 NavigationBarAction 로 명명합니다.
-
간단한 구현을 위해 일반 입력 액션(Common Input Action) 위젯과 가로 박스의 일반 텍스트 위젯(Common Text Widget) 을 사용합니다. 일반 입력 액션 위젯은 버튼 아이콘을 표시하며, 일반 텍스트 위젯은 입력 액션의 친근한 이름을 표시합니다.
-
일반 텍스트 위젯을 'Text_ActionName'으로 명명합니다.
UCommonBoundActionButton은 이 특정 이름을 바탕으로 텍스트 위젯을 InputAction의 텍스트에 바인딩합니다.일반 텍스트 위젯의 이름을 'Text_ActionName'으로 변경하지 않으면 블루프린트가 컴파일에 실패할 것입니다.
-
CommonBoundActionButton을 CommonBoundActionBar의 액션 버튼 클래스(Action Button Class) 에 추가합니다.
-
CommonBoundActionBar에 표시할 액션이 있는 UI의 범용 UI 위젯을 선택하고 액션 바에 표시(Display in Action Bar) 를 true 로 설정합니다. C++에서 이는
bDisplayInActionBar로 표현됩니다.
bDisplayInActionBar는UCommonButtonBase과 마찬가지로UCommonUserWidget의 멤버이자 파생된 클래스입니다. 입력 액션 자체와 마찬가지로 베이스 UMG의 위젯 라이브러리에서는 사용할 수 없습니다. -
표시하려는 입력 액션이 포함된 위젯이 활성화(Activated) 됐는지 확인합니다. 즉 위젯 자체가 활성화 가능 위젯이거나 활성화 가능 위젯의 자손이어야 합니다.
활성화 가능 위젯은 디폴트로 비활성화 상태에서 시작됩니다. UCommonUserWidget::Activate 를 호출하여 이 위젯을 수동 활성화하거나 자동 활성화(Auto Activate) 세팅(UCommonActivatableWidget::bAutoActivate)을 사용하여 뷰포트에 추가될 때 자동 활성화되게 할 수 있습니다.
액션을 포함하는 위젯이 활성화되었다면 플레이 시 액션이 탐색 바에 표시될 것입니다.