UWP 앱용 게임 기술

이 가이드에서는 UWP(유니버설 Windows 플랫폼) 게임을 개발하는 데 사용할 수 있는 기술에 대해 알아봅니다.

게임 개발을 위한 Windows 10의 이점

Windows 10에서 UWP가 도입되면 Windows 10 타이틀이 모든 Microsoft 플랫폼에 걸쳐 있을 수 있습니다. 이전 버전의 Windows에서 무료 마이그레이션을 사용하면 Windows 10 클라이언트 수가 꾸준히 증가하고 있습니다. 이 두 가지의 조합은 Windows 10 타이틀이 Microsoft Store를 통해 엄청난 수의 고객에게 제공될 수 있음을 의미합니다.

또한 Windows 10은 게임에 특히 도움이 되는 많은 새로운 기능을 제공합니다.

  • 메모리 페이징 감소 및 전체 메모리 시스템 크기 감소
  • 향상된 그래픽 메모리 관리가 포그라운드 게임에 더 많은 메모리를 적극적으로 할당하고 보호

C++ 및 DirectX로 작성된 UWP 게임

고성능이 필요한 실시간 게임은 DirectX API를 사용해야 합니다. DirectX는 3D 게임과 같은 고성능이 필요한 게임 및 멀티미디어 애플리케이션을 만들기 위한 네이티브 API 컬렉션입니다.

개발 환경

UWP용 게임을 만들려면 Visual Studio 2015 이상을 설치하여 개발 환경을 설정해야 합니다. 최신 버전의 Visual Studio를 설치하여 최신 개발 및 보안 업데이트에 액세스하는 것이 좋습니다. Visual Studio에서는 UWP 앱을 만들 수 있으며 게임 개발용 도구를 제공합니다.

  • DX 게임 프로그래밍용 Visual Studio 도구 - Visual Studio는 이미지, 모델 및 셰이더 리소스를 만들고, 편집하고, 미리 보고, 내보내는 도구를 제공합니다. 빌드 시 리소스를 변환하고 DirectX 그래픽 코드를 디버그하는 데 사용할 수 있는 도구도 있습니다. 자세한 내용은 게임 프로그래밍에 Visual Studio 도구 사용을 참조하세요.
  • Visual Studio 그래픽 진단 기능 - 이제 그래픽 진단 도구를 Windows 내에서 선택적 기능으로 사용할 수 있습니다. 진단 도구를 사용하면 그래픽 디버깅, 그래픽 프레임 분석을 수행하고 GPU 사용량을 실시간으로 모니터링할 수 있습니다. 자세한 내용은 DirectX 런타임 및 Visual Studio 그래픽 진단 기능 사용을 참조하세요.

자세한 내용은 유니버설 Windows 플랫폼 및 DirectX 프로그래밍 준비를 참조하세요.

DirectX 게임 프로젝트 템플릿 시작

개발 환경을 설정한 후에는 DirectX 관련 프로젝트 템플릿 중 하나를 사용하여 UWP DirectX 게임을 만들 수 있습니다. Visual Studio 2015에는 새 UWP DirectX 프로젝트, DirectX 11 앱(유니버설 Windows), DirectX 12 앱(유니버설 Windows)DirectX 11 및 XAML 앱(유니버설 Windows)을 만드는 데 사용할 수 있는 세 가지 템플릿이 있습니다. 자세한 내용은 템플릿에서 유니버설 Windows 플랫폼 및 DirectX 게임 프로젝트 만들기를 참조하세요.

Windows 10 API

Windows 10에서는 게임 개발에 유용한 광범위한 API 컬렉션을 제공합니다. 3D 그래픽, 2D 그래픽, 오디오, 입력, 텍스트 리소스, 사용자 인터페이스 및 네트워킹을 비롯한 게임의 거의 모든 측면에 대한 API가 있습니다.

게임 개발과 관련된 API가 많지만 모든 게임이 모든 API를 사용해야 하는 것은 아닙니다. 예를 들어 일부 게임은 3D 그래픽만 사용하고 Direct3D만 사용하며, 일부 게임은 2D 그래픽만 사용하고 Direct2D만 사용할 수 있으며, 다른 게임에서는 둘 다 사용할 수 있습니다. 다음 다이어그램에서는 기능 유형별로 그룹화된 게임 개발 관련 API를 보여 줍니다.

game platform technologies

  • 3D 그래픽 - Windows 10은 Direct3D 11 및 Direct3D 12라는 두 개의 3D 그래픽 API 집합을 지원합니다. 이러한 API는 모두 3D 및 2D 그래픽을 만드는 기능을 제공합니다. Direct3D 11 및 Direct3D 12는 함께 사용되지 않지만 2D 그래픽 및 UI 그룹의 API와 함께 사용할 수 있습니다. 게임에서 그래픽 API를 사용하는 방법에 대한 자세한 내용은 DirectX 게임의 기본 3D 그래픽을 참조하세요.

    API 설명
    Direct3D 12

    Direct3D 12에는 DirectX의 핵심인 3D 그래픽 API인 Direct3D의 다음 버전이 도입되었습니다. 이 버전의 Direct3D는 이전 버전의 Direct3D보다 빠르고 효율적으로 설계되었습니다. Direct3D 12의 향상된 속도의 장단점은 더 낮은 수준이며 그래픽 리소스를 직접 관리하고 향상된 속도를 실현하기 위해 보다 광범위한 그래픽 프로그래밍 환경을 갖추어야 한다는 것입니다.

    사용 시기

    게임의 성능을 최대화해야 하고 게임이 CPU에 바인딩된 경우 Direct3D 12를 사용합니다.

    자세한 내용

    Direct3d 12 설명서를 참조하세요.

    Direct3D 11

    Direct3D 11은 이전 버전의 Direct3D이며 D3D 12보다 높은 수준의 하드웨어 추상화로 3D 그래픽을 만들 수 있습니다.

    사용 시기

    기존 Direct3D 11 코드가 있거나, 게임이 CPU에 바인딩되지 않았거나, 리소스를 관리하려는 경우 Direct3D 11을 사용합니다.

    자세한 내용

    Direct3D 11 설명서를 참조하세요.

     

  • 2D 그래픽 및 UI - 텍스트 및 사용자 인터페이스와 같은 2D 그래픽과 관련된 API입니다. 모든 2D 그래픽 및 UI API는 선택 사항입니다.

    API 설명
    Direct2D

    Direct2D는 2차원 기하 도형, 비트맵 및 텍스트에 대한 고성능 및 고품질 렌더링을 제공하는 하드웨어 가속 직접 모드 2차원 그래픽 API입니다. Direct2D API는 Direct3D를 기반으로 하며 GDI, GDI+ 및 Direct3D와 잘 상호 운용되도록 설계되었습니다.

    사용 시기

    Direct2D 대신 Direct3D를 사용하여 사이드 스크롤러 또는 보드 게임과 같은 순수 2D 게임에 대한 그래픽을 제공하거나 Direct3D와 함께 사용하여 사용자 인터페이스 또는 헤드업 디스플레이와 같은 3D 게임에서 2D 그래픽 생성을 간소화할 수 있습니다.

    자세한 내용

    Direct2D 설명서를 참조하세요.

    DirectWrite

    DirectWrite는 텍스트 작업을 위한 추가 기능을 제공하며 Direct3D 또는 Direct2D와 함께 사용하여 사용자 인터페이스 또는 텍스트가 필요한 다른 영역에 대한 텍스트 출력을 제공할 수 있습니다. DirectWrite는 다중 형식 텍스트의 측정, 그리기 및 적중 테스트를 지원합니다. DirectWrite는 전역 및 지역화된 애플리케이션에 대해 지원되는 모든 언어로 텍스트를 처리합니다. 또한 DirectWrite는 자체 레이아웃 및 유니코드-문자 모양 처리를 수행하려는 개발자를 위한 하위 수준 문자 모양 렌더링 API를 제공합니다.

    사용 시기

    자세한 내용

    DirectWrite 설명서를 참조하세요.

    DirectComposition

    DirectComposition은 변환, 효과 및 애니메이션을 사용하여 고성능 비트맵 컴퍼지션을 가능하게 하는 Windows 구성 요소입니다. 애플리케이션 개발자는 DirectComposition API를 사용하여 시각적 개체에서 다른 시각적 개체로의 풍부하고 유동적인 애니메이션 전환을 특징으로 하는 시각적으로 매력적인 사용자 인터페이스를 만들 수 있습니다.

    사용 시기

    DirectComposition은 시각적 개체를 작성하고 애니메이션 전환을 만드는 프로세스를 간소화하도록 설계되었습니다. 게임에 복잡한 사용자 인터페이스가 필요한 경우 DirectComposition을 사용하여 UI 만들기 및 관리를 간소화할 수 있습니다.

    자세한 내용

    DirectComposition 설명서를 참조하세요.

     

  • 오디오 - 오디오 재생 및 오디오 효과 적용과 관련된 API입니다. 게임에서 오디오 API를 사용하는 방법에 대한 자세한 내용은 게임용 오디오를 참조하세요.

    API 설명
    XAudio2

    XAudio2는 신호 처리 및 믹싱에 대한 기초를 제공하는 하위 수준의 오디오 API입니다. XAudio는 사용자 지정 오디오 효과와 오디오 효과 및 필터의 복잡한 체인을 만드는 기능을 기본 게임 오디오 엔진에 대해 매우 반응하도록 설계되었습니다.

    사용 시기

    게임에서 최소한의 오버헤드와 지연으로 소리를 재생해야 하는 경우 XAudio2를 사용합니다.

    자세한 내용

    XAudio2 설명서를 참조하세요.

    오디오 그래프

    XAudio2를 사용하여 구현할 수 있는 기능의 경우 Windows 런타임 오디오 그래프 API를 대신 사용할 수 있습니다. 두 가지 방법 중 하나를 결정하는 데 도움이 되도록 Windows 런타임 오디오 그래프 또는 XAudio2 선택을 참조하세요.

    사용 시기

    게임에서 최소한의 오버 헤드 및 지연으로 소리를 재생해야 하지만 XAudio2 보다 훨씬 사용하기 쉬운 API와 C# 지원 옵션을 사용하는 경우 오디오 그래프를 사용합니다.

    자세한 내용

    오디오 그래프 설명서를 참조하세요.

    미디어 파운데이션

    Microsoft Media Foundation은 오디오와 비디오 모두에서 미디어 파일 및 스트림의 재생을 위해 설계되었지만 XAudio2보다 높은 수준의 기능이 필요하고 일부 추가 오버헤드가 허용되는 경우 게임에서도 사용할 수 있습니다.

    사용 시기

    미디어 파운데이션은 영화 장면 또는 게임의 비대화형 구성 요소에 특히 유용합니다. 미디어 파운데이션은 XAudio2를 사용하여 재생을 위해 오디오 파일을 디코딩하는 데에도 유용합니다.

    자세한 내용

    Microsoft 미디어 파운데이션 개요를 참조하세요.

     

  • 입력 - 키보드, 마우스, 게임 패드 및 기타 사용자 입력 소스의 입력과 관련된 API입니다.

    API 설명
    XInput

    XInput 게임 컨트롤러 API를 사용하면 애플리케이션이 게임 컨트롤러에서 입력을 받을 수 있습니다.

    사용 시기

    게임에서 게임 패드 입력을 지원해야 하고 기존 XInput 코드가 있는 경우 XInput을 계속 사용할 수 있습니다. XInput은 UWP용 Windows.Gaming.Input으로 대체되었으며 새 입력 코드를 작성하는 경우 XInput 대신 Windows.Gaming.Input을 사용해야 합니다.

    자세한 내용

    XInput 설명서를 참조하세요.

    Windows.Gaming.Input

    Windows.Gaming.Input API는 XInput을 대체하고 Xinput보다 다음과 같은 장점과 동일한 기능을 제공합니다.

    • 리소스 사용량 감소
    • 입력 검색을 위한 낮은 API 호출 대기 시간
    • 한 번에 4개 이상의 게임 패드로 작업할 수 있는 기능
    • 트리거 진동 모터와 같은 추가 게임패드 기능에 액세스할 수 있는 기능
    • 컨트롤러가 폴링 대신 이벤트를 통해 연결/연결을 끊을 때 알림을 받을 수 있는 기능
    • 특정 사용자에 대한 입력 특성 지정 기능(Windows.System.User)

    사용 시기

    게임에서 게임 패드 입력을 지원해야 하고 기존 XInput 코드를 사용하지 않거나 위에 나열된 이점 중 하나가 필요한 경우 Windows.Gaming.Input을 사용해야 합니다.

    자세한 내용

    Windows.Gaming.Input 설명서를 참조하세요.

    Windows.UI.Core.CoreWindow

    Windows.UI.Core.CoreWindow 클래스는 포인터 누름 및 이동을 추적하기 위한 이벤트와 키 다운 및 키 업 이벤트를 제공합니다.

    사용 시기

    게임에서 마우스 또는 키 누름을 추적해야 하는 경우 Windows.UI.Core.CoreWindows 이벤트를 사용합니다.

    자세한 내용

    게임에서 마우스 또는 키보드를 사용하는 방법에 대한 자세한 내용은 게임에 대한 이동 보기 컨트롤을 참조하세요.

     

  • 수학 - 일반적으로 사용되는 수학 연산 간소화와 관련된 API입니다.

    API 설명
    DirectXMath

    DirectXMath API는 게임에 공통적인 일반적인 선형 대수 및 그래픽 수학 연산을 위한 SIMD 친화적인 C++ 형식 및 함수를 제공합니다.

    사용 시기

    DirectXMath 사용은 선택 사항이며 일반적인 수학 연산을 간소화합니다.

    자세한 내용

    DirectXMath 설명서를 참조하세요.

     

  • 네트워킹 - 인터넷 또는 개인 네트워크를 통해 다른 컴퓨터 및 디바이스와 통신하는 API입니다.

    API 설명
    Windows.Networking.Sockets

    Windows.Networking.Sockets 네임스페이스는 안정적이거나 신뢰할 수 없는 네트워크 통신을 허용하는 TCP 및 UDP 소켓을 제공합니다.

    사용 시기

    게임이 네트워크를 통해 다른 컴퓨터 또는 장치와 통신해야 하는 경우 Windows.Networking.Sockets를 사용합니다.

    자세한 내용

    게임에서 네트워킹 작업을 참조하세요.

    Windows.Web.HTTP

    Windows.Web.HTTP 네임스페이스는 웹 사이트에 액세스하는 데 사용할 수 있는 HTTP 서버에 대한 안정적인 연결을 제공합니다.

    사용 시기

    게임에서 정보를 검색하거나 저장하기 위해 웹 사이트에 액세스해야 하는 경우 Windows.Web.HTTP를 사용합니다.

    자세한 내용

    게임에서 네트워킹 작업을 참조하세요.

     

  • 지원 유틸리티 - Windows 10 API를 기반으로 빌드되는 라이브러리입니다.

    라이브러리 설명
    DirectX 도구 키트

    DirectXTK(DirectX 도구 키트)는 C++에서 DirectX 11.x 코드를 작성하기 위한 도우미 클래스의 컬렉션입니다.

    사용 시기

    레거시 D3DX 유틸리티 코드를 최신으로 대체하려는 C++ 개발자이거나 네이티브 C++로 전환하는 XNA Game Studio 개발자인 경우 DirectX 도구 키트를 사용합니다.

    자세한 내용

    DirectX 도구 키트 프로젝트 페이지 https://github.com/Microsoft/DirectXTK를 참조하세요.

    Win2D

    Win2D는 직접 실행 모드 2D 그래픽 렌더링을 위한 사용하기 쉬운 Windows 런타임 API입니다.

    사용 시기

    C++ 개발자이고 Direct2D 및 DirectWrite에 WinRT 래퍼를 더 쉽게 사용하려는 경우 또는 Direct2D 및 DirectWrite를 사용하려는 C# 개발자인 경우 Win2D를 사용합니다.

    자세한 내용

    Win2D 프로젝트 페이지 https://github.com/Microsoft/Win2D를 참조하세요.

Xbox Live 서비스

Xbox 개발자 프로그램을 통해 모든 개발자는 Xbox Live를 UWP 게임에 통합하고 Xbox One 및 Windows 10에 게시할 수 있습니다. 최소한의 개발 시간을 투자하여 로그인, 상태, 순위표 등의 Xbox Live 소셜 환경을 타이틀과 통합하세요. Xbox Live 소셜 기능은 5500만이 넘는 활성 사용자에게 인지도를 확산시켜 고객을 조직적으로 유치할 수 있도록 설계되었습니다.

훨씬 다양한 Xbox Live 기능을 사용하고 전용 마케팅 및 개발 지원을 이용하고 메인 Xbox One 스토어에 추천 앱으로 등록되고 싶다면 ID@Xbox 프로그램에 지원하세요. Xbox Live 크리에이터스 프로그램 및 ID@Xbox 프로그램에 제공되는 기능을 살펴보려면 기능표를 참조하세요.

자세한 내용을 보려면 게임에 Xbox Live 추가로 이동하세요.

DirectX 및 UWP를 사용하여 게임을 작성하는 대안

DirectX를 사용하지 않는 UWP 게임

카드 게임 또는 보드 게임과 같이 성능 요구 사항이 최소화된 간단한 게임은 DirectX 없이 작성할 수 있으며 반드시 C++로 작성할 필요는 없습니다. 이러한 종류의 게임은 C#, Visual Basic, C++, HTML/JavaScript와 같은 UWP에서 지원하는 언어를 사용할 수 있습니다. 성능 및 집약적인 그래픽이 게임에 대한 요구 사항이 아닌 경우 JavaScript 및 HTML5 터치 게임 샘플을 예로 확인합니다.

게임 엔진

Windows 게임 개발 API를 사용하여 사용자 고유의 게임 엔진을 작성하는 대신 Windows 게임 개발 API를 기반으로 하는 많은 고품질 게임 엔진을 Windows 플랫폼에서 게임을 개발할 수 있습니다. 게임 엔진 또는 라이브러리를 고려할 때 다음과 같은 여러 옵션이 있습니다.

  • 전체 게임 엔진 - 전체 게임 엔진은 그래픽, 오디오, 입력 및 네트워킹과 같은 게임 엔진을 처음부터 작성할 때 사용할 Windows 10 API의 대부분 또는 전부를 캡슐화합니다. 전체 게임 엔진은 인공 지능 및 경로 정의와 같은 게임 논리 기능을 제공할 수도 있습니다.
  • 그래픽 엔진 - 그래픽 엔진은 Windows 10 그래픽 API를 캡슐화하고 그래픽 리소스를 관리하며 다양한 모델 및 세계 형식을 지원합니다.
  • 오디오 엔진 - 오디오 엔진은 Windows 10 오디오 API를 캡슐화하고, 오디오 리소스를 관리하고, 고급 오디오 처리 및 효과를 제공합니다.
  • 네트워크 엔진 - 네트워크 엔진은 게임에 피어 투 피어 또는 서버 기반 멀티 플레이어 지원을 추가하기 위해 Windows 10 네트워킹 API를 캡슐화하며 많은 플레이어를 지원하는 고급 네트워킹 기능을 포함할 수 있습니다.
  • 인공 지능 및 경로 정의 엔진 - AI 및 경로 정의 엔진은 게임에서 에이전트의 동작을 제어하기 위한 프레임워크를 제공합니다.
  • 특수 목적 엔진 - 인벤토리 시스템 및 대화 트리 만들기와 같이 실행할 수 있는 거의 모든 게임 개발 관련 작업을 처리하기 위한 다양한 추가 엔진이 있습니다.

Microsoft Store에 게임 제출

게임을 게시할 준비가 되면 개발자 계정을 만들고 Microsoft Store에 게임을 제출해야 합니다.

Microsoft Store에 게임을 제출하는 방법은 게임 제출 및 게시를 참조하세요.