범용 UI는 [UMG]의(creating-user-interfaces/umg-editor)의 확장 추가 기능으로, 다양한 시스템과 툴을 갖추고 있습니다. 이 페이지에서는 범용 UI 구현의 모범 사례를 학습하는 데 유용한 가이드라인과 자주 묻는 질문을 알아봅니다.
범용 UI가 우리 프로젝트에 잘 맞을까요?
범용 UI는 여러 유용한 기능이 있지만, 주로 두 가지 주요 사용 사례를 염두에 두고 만들어졌습니다.
-
복잡한 다중 레이어 인터페이스
-
크로스 플랫폼 지원
프로젝트에 이 두 사용 사례 중 하나가 예상되지 않는 경우 범용 UI가 필요하지 않을 수 있습니다. 두 사용 사례 외에도 범용 UI를 사용하면 어떤 이익이 있을지, 이런 이익을 위해 UI 제작 및 상호작용의 새 패러다임을 학습할 가치가 있을지 고려해 볼 것을 권장합니다.
예를 들어 PC 전용 실시간 전략(RTS) 게임을 디자인할 때는 범용 UI가 부적합할 수 있습니다. 이런 유형의 게임은 일반적으로 복잡한 방향 탐색이 필요하지 않은 단일 레이어 UI를 사용해서, 범용 UI의 입력 라우팅이나 바운드 액션 시스템으로부터 얻는 이익이 드물기 때문입니다.
또한 WidgetComponents를 사용하여 배치된 위젯에 범용 UI를 사용하는 것은 권장되지 않습니다. 범용 UI는 커서-포커스 탐색, 활성화 순서, 페인트 순서/레이어 ID에 의존하므로, 2D 게임 HUD도 처리할 수는 있지만 게임 월드에 배치된 위젯과 함께 작동하지는 않습니다.
범용 UI로 마이그레이션하기
기존 UI가 있는 경우 범용 UI로의 마이그레이션을 고려할 수도 있습니다. 이런 결정을 내릴 때는 현재 UI가 거의 완성됐는지, 향후 범용 UI를 사용하면 좋은 UI 개발 계획이 있는지를 고려하세요.
또한 범용 UI로 새 위젯을 만들면서 이전 UI와 상호작용하는 것이 가능한지, 아니면 범용 UI로 마이그레이션하기 위해 전체 UI를 수정해야 하는지도 고려해야 합니다.
CommonActivatableWidget 또는 CommonUserWidget을 사용해야 하나요?
모든 범용 UI 위젯이 활성화 가능 위젯(Activatable Widget)인 것은 아닙니다. 켜짐/꺼짐에 따라 입력 라우팅에 영향을 미쳐야 하는 경우에만 위젯을 활성화 가능 위젯으로 만들어야 합니다.
만들고 있는 위젯이 입력 자체를 처리하기 위해서만 범용 UI의 입력 라우팅 시스템과 상호작용해야 하는 경우, CommonUserWidget 또는 일반 사용자 위젯을 고려하세요. CommonUserWidget은 UCommonButtonBase 및 UCommonTabListWidgetBase 등 많은 범용 UI 클래스의 기반이 됩니다. 툴팁은 활성화 가능 위젯이 부적합한 대표적인 예시입니다. 툴팁은 빠르게 나타나고 사라지는 경향이 있기 때문에 입력을 자손 위젯으로 전달하거나 나머지 UI에서 가져올 필요가 없습니다.
만들고 있는 위젯에 상호작용 가능한 자손이 많거나 나머지 UI로부터 입력 핸들링을 차단해야 하는 경우 활성화 가능 위젯을 사용하는 것이 좋습니다. 팝업 창과 모달 메뉴가 이런 행동의 좋은 예시입니다.
키보드와 마우스 탐색을 동시에 처리하는 방법은 무엇인가요?
범용 UI는 게임패드 탐색과 기존 마우스 및 키보드 탐색 모두 쉽게 지원합니다. 일반적인 실수는 키보드와 마우스 탐색을 동시 지원하려는 것입니다. 범용 UI는 키보드 탐색을 게임패드 탐색과 달리 마우스 탐색과 동시에 지원하지 않습니다. 범용 UI.
이 탐색 입력 조합을 위해서는 마우스가 자유롭게 탐색 가능하고 키보드와 별도의 호버/포커스를 갖는지, 현재 마우스로 호버/포커스하지 않은 엘리먼트를 탐색할 때 키보드가 어떻게 되는지 등을 고려하세요. UI는 플레이어 한 명이 두 개의 엘리먼트에 마우스 커서를 가져간 것과 같은 상태가 될 수 있습니다. 이 상태는 시각적으로 혼란을 줄 수 있으며 게임 내 모든 UI에서 지원하기가 어렵습니다.
범용 UI가 키보드 및 마우스 탐색을 동시에 직접 지원하지는 않지만, 키보드 탐색과 함께 올바르게 작동하는 특수 위젯을 만드는 것은 가능합니다. 또한 마우스 탐색과 키보드 사용을 게임패드 탐색처럼 토글 하는 것도 가능합니다. 토글은 포커스를 항상 하나의 위젯에 유지하기 때문입니다.