지난 몇 년 동안 주류 UI 툴킷에서 정말 흥미로운 돌파구가있었습니다. 게임 UI도 발전하고 있지만 다소 느리게 진행되고 있습니다. 모든 기능을 갖춘 UI 하위 시스템을 개발하는 것은 자체적으로 중요한 작업이므로 리소스 투자를 정당화하기가 어렵 기 때문일 수 있습니다.
내가 가장 좋아하는 UI 시스템은 WPF (Windows Presentation Foundation)입니다. UI 차별화의 잠재력을 한 단계 끌어 올립니다. 보다 흥미로운 기능은 다음과 같습니다.
컨트롤은 기본적으로 "look-less"입니다. 컨트롤의 논리와 시각적 모양은 일반적으로 분리되어 있습니다. 모든 컨트롤에는 기본 시각적 모양을 설명하는 기본 스타일과 템플릿이 제공됩니다. 예를 들어, 버튼은 외부 획, 단색 또는 그라데이션 배경 및 컨텐츠 발표자 (캡션 표시)가있는 둥근 사각형으로 표시 될 수 있습니다. 개발자 (또는 디자이너)는 컨트롤의 모양과 동작을 변경하는 사용자 지정 스타일 템플릿을 만들 수 있습니다. 스타일을 사용하여 전경 / 배경색, 템플릿 등과 같은 컨트롤의 간단한 속성을 재정의 할 수 있습니다. 템플릿은 실제 시각적 구조를 변경합니다.
스타일과 템플릿에는 "트리거"가 포함될 수 있습니다. 트리거는 특정 이벤트 나 속성 값 (또는 값의 조합)을 수신하고 스타일 또는 템플릿의 측면을 조건부로 변경할 수 있습니다. 예를 들어, 단추 템플릿은 일반적으로 마우스를 단추 위로 가져갈 때 배경색을 변경하기 위해 "IsMouseOver"속성에 트리거를 갖습니다.
최소한의 기능을 가진 가벼운 요소부터 본격적인 무거운 컨트롤까지 다양한 UI 요소 레벨이 있습니다. 이를 통해 UI를 구성하는 방법에 약간의 유연성이 제공됩니다. 가장 간단한 UI 요소 클래스 UIElement
는 스타일이나 템플릿이 없으며 가장 간단한 입력 이벤트 만 지원합니다. 상태 표시기와 같은 간단한 요소의 경우이 기능 만 있으면됩니다. 보다 광범위한 입력 지원이 필요한 경우 FrameworkElement
(에서 확장 UIElement
) 에서 파생 될 수 있습니다 . 기존 위젯은 일반적으로에서 파생되며 사용자 정의 스타일 및 템플릿 지원 Control
을 확장 FrameworkElement
하고 추가합니다 (다른 것 포함).
WPF는 확장 가능하고 해상도 독립적 인 벡터 그래픽 모델을 사용합니다. Windows에서 WPF 응용 프로그램은 Direct3D를 사용하여 렌더링 및 구성됩니다.
WPF에는 Xaml이라는 새로운 선언적 프로그래밍 언어가 도입되었습니다. Xml을 기반으로하는 Xaml은 UI "장면"을 선언하기 위해 선호되는 언어입니다. 실제로는 매끄럽고 언뜻보기에는 비슷하지만 XUL (및 훨씬 더 강력한)과 같은 기존 언어와 근본적으로 다릅니다.
WPF는이 매우 고급 텍스트 서브 시스템을. 모든 OpenType 글꼴 기능, 양방향 ClearType 앤티 앨리어싱, 서브 픽셀 위치 지정 등 대부분을 지원합니다.
"좋아, 이제 게임 개발과 어떤 관련이 있는가?"
WPF가 아직 개발 중일 때 (그리고 "Avalon"으로 알려짐), Georgia Tech에서 비디오 게임 디자인 과정을 수강하고있었습니다. 마지막 프로젝트는 턴제 전략 게임이었고, 유능한 UI를 원했습니다. WPF / 아발론은 완전한 기능을 갖춘 컨트롤의 완전한 세트를했기 때문에 가서 좋은 경로처럼 보였다 과 완전히 모양을 변경하고 해당 컨트롤의 느낌이 나에게 능력을 게임. 그 결과 일반적으로 본격적인 응용 프로그램에서만 볼 수있는 기능 수준의 아름답고 선명한 UI를 갖춘 게임이 탄생했습니다.
이제 게임에 WPF를 사용할 때의 문제는 상당히 무겁고 자체 "샌드 박스"로 렌더링된다는 것입니다. 즉, Direct3D 또는 OpenGL 게임 환경에서 WPF를 호스팅하는 지원되는 방법이 없습니다. WPF 응용 프로그램 내에서 Direct3D 컨텐트를 호스팅 할 수 있지만 WPF 응용 프로그램의 프레임 속도에 따라 제한을받습니다. 일반적으로 원하는 것보다 낮습니다. 2D 전략 게임 (현재 WPF 게임 프로젝트의 스크린 샷)과 같은 일부 유형의 게임의 경우 여전히 훌륭하게 작동 할 수 있습니다. 그 밖의 다른 것에는 그렇게하지 않습니다. 그러나 여전히 고유 한 UI 프레임 워크를 개발할 때 WPF의보다 강력한 아키텍처 개념을 적용 할 수 있습니다.
또한 W32의 오픈 소스 관리되지 않는 C ++ / Direct3D 구현 인 "WPF / G (게임용 WPF)"]] ( http://wpfg.codeplex.com/ )가 있으며 이는 Win32 모두에서 게임에 사용하도록 특별히 설계되었습니다. 그리고 Windows Mobile. 활발한 개발은 중단 된 것으로 보이지만, 마지막으로 체크 아웃했을 때는 다소 완전한 구현이었습니다. 텍스트 하위 시스템은 Microsoft의 WPF 구현과 비교할 때 실제로 부족한 영역 중 하나 였지만 게임에는 문제가되지 않았습니다. WPF / G를 Direct3D 기반 게임 엔진과 통합하는 것이 비교적 간단하다고 생각합니다. 이 경로를 사용하면 UI 사용자 정의를 광범위하게 지원하는 성능이 뛰어난 해상도 독립적 UI 프레임 워크를 제공 할 수 있습니다.
WPF 기반 게임 UI의 모양에 대한 아이디어를 제공하기 위해 내 애완 동물 프로젝트의 스크린 샷은 다음과 같습니다.