ユニバーサル Windows プラットフォーム (UWP) アプリのゲーム テクノロジ

[ Windows 10 の UWP アプリ向けに更新。 Windows 8.x の記事については、アーカイブをご覧ください ]

このガイドでは、ユニバーサル Windows プラットフォーム UWP ゲームの開発に利用できるテクノロジについて説明します。

ゲーム開発向けの Windows 10 のメリット

Windows 10 で UWP が導入されたことにより、作成した Windows 10 のタイトルはすべての Microsoft プラットフォームに対応できます。 以前のバージョンの Windows から無料で移行できるため、Windows 10 のユーザー数は着実に増加しています。 これらの 2 つの事実を組み合わせると、Windows 10 のタイトルは、Windows ストアを通じて膨大な数のユーザーに提供できることを意味します。

また Windows 10 には、特にゲームに便利な、多くの新しい機能が用意されています。

  • メモリのページングの削減および全体的なメモリ システム サイズの削減
  • グラフィックス メモリの管理機能の向上により、フォアグラウンドのゲームに、より多くのメモリがアクティブに割り当てられ、保護されます。

C++ と DirectX を使った UWP ゲーム

高パフォーマンスを必要とするリアルタイム ゲームでは、DirectX API を使用する必要があります。 DirectX は、3D ゲームなど、高パフォーマンスを必要とするゲームやマルチメディア アプリケーションを作成するための、ネイティブ API のコレクションです。 DirectX API はネイティブであるため、DirectX と共に使用できる言語は C++ のみです。

開発環境

UWP 用のゲームを作成するには、Visual Studio 2015 をインストールして開発環境をセットアップする必要があります。 Visual Studio 2015 を使うことによって、UWP アプリを作成でき、ゲーム開発用のツールが提供されます。

  • Visual Studio の DX ゲームのプログラミング用ツール: 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) の 3 つがあります。 詳しくは、「テンプレートからのユニバーサル Windows プラットフォームおよび DirectX ゲーム プロジェクトの作成」をご覧ください。

Windows 10 API

Windows 10 では、ゲーム開発に役立つさまざまな API を利用できます。 3D グラフィックス、2D グラフィックス、オーディオ、入力、テキスト リソース、ユーザー インターフェイス、ネットワークなど、ゲームのほとんどすべての側面にかかわる API が用意されています。

ゲーム開発に関連する API は数多くありますが、すべてのゲームですべての API を使用する必要はありません。 たとえば、3D グラフィックスと Direct3D のみを利用するゲームもあれば、2D グラフィックスと Direct2D のみを利用するゲームもあります。また、その両方を使用するゲームもあります。 次の図は、ゲーム開発に関連する API を機能別にグループ分けしています。

ゲーム プラットフォーム テクノロジ

  • 3D グラフィックス: Windows 10 では、Direct3D 11 と Direct3D 12 の 2 つの 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 の速度の向上のトレードオフは、より下位レベルで動作することであり、グラフィックス リソースを自分で管理する必要があることです。また、速度の向上を実現するには、広範なグラフィックスのプログラミングの経験が必要です。

    使う状況

    Direct3D 12 は、ゲームのパフォーマンスを最大化する必要があり、ゲームが CPU バウンドである場合に使います。

    詳細情報

    Direct3d 12 に関連するドキュメントをご覧ください。

    Direct3D 11

    Direct3D 11 は、以前のバージョンの Direct3D であり、D3D 12 より上位レベルのハードウェア アブストラクションを使用して 3D グラフィックスを作成できます。

    使う状況

    Direct3D 11 のコードが既にある場合、ゲームが CPU バウンドではない場合、またはリソースが自動的に管理されるメリットが必要な場合は、Direct3D 11 を使います。

    詳細情報

    Direct3D 11 に関連するドキュメントをご覧ください。

  • 2D グラフィックスおよび UI API: テキストやユーザー インターフェイスなどの 2D グラフィックスに関する API です。 すべての 2D グラフィックスおよび UI API はオプションです。

    API 説明
    Direct2D

    Direct2D は、2D ジオメトリ、ビットマップ、テキストの高パフォーマンスかつ高品質のレンダリングを実現する、ハードウェア アクセラレータによる、即時モードの 2D グラフィックス API です。 Direct2D API は Direct3D を基にして構築されており、GDI、GDI+、Direct3D とも適切に相互運用できるように設計されています。

    使う状況

    Direct2D は、横スクロール ゲームやボード ゲームなどの純粋な 2D ゲーム用のグラフィックスを提供するために、Direct3D の代わりに使うことができます。また、ユーザー インターフェイスやヘッドアップ ディスプレイなど、3D ゲーム内での 2D グラフィックスの作成を簡素化するために Direct3D と共に使うこともできます。

    詳細情報

    Direct2D に関連するドキュメントをご覧ください。

    DirectWrite

    DirectWrite は、テキストを操作するための追加の機能を提供します。Direct3D や Direct2D と共に使用して、ユーザー インターフェイスや、テキストが必要なその他の領域にテキスト出力を提供できます。 DirectWrite は、複数形式のテキストの測定、描画、ヒット テストをサポートします。 DirectWrite は、グローバル アプリケーションとローカライズされたアプリケーションで、サポートされているすべての言語のテキストを処理します。 DirectWrite は、独自のレイアウトと Unicode からグリフへの処理を実行する必要がある開発者に、下位レベルのグリフ レンダリング API も提供します。

    使う状況

    詳細情報

    DirectWrite に関連するドキュメントをご覧ください。

    DirectComposition

    DirectComposition は、変換、効果、アニメーションを使って、高パフォーマンスのビットマップ合成を実現できる Windows コンポーネントです。 アプリケーション開発者は、DirectComposition API によって、ビジュアル要素間で機能豊富で柔軟な切り替えのアニメーションを使った、視覚的に魅力のあるユーザー インターフェイスを作成できます。

    使う状況

    DirectComposition は、視覚要素を合成し、切り替えのアニメーションを作成するプロセスを簡略化するように設計されています。 複雑なユーザー インターフェイスがゲームに必要な場合、DirectComposition を使って、簡単に UI を作成および管理できます。

    詳細情報

    DirectComposition に関連するドキュメントをご覧ください。

  • オーディオ: オーディオの再生やオーディオ エフェクトの適用に関する API です。 ゲームでオーディオ API を使う方法について詳しくは、「ゲームのオーディオ」をご覧ください。

    API 説明
    XAudio2

    XAudio2 は、信号処理とミキシングの基礎を提供する下位レベルのオーディオ API です。 XAudio は、カスタム オーディオ エフェクトや、オーディオ エフェクトとフィルターの複雑なチェーンを作成する機能を維持しながら、ゲーム オーディオ エンジンに対する応答性が高くなるように設計されています。

    使う状況

    ゲームでオーバーヘッドと遅延を最小限に抑えながらサウンドを再生する必要がある場合、XAudio2 を使用します。

    詳細情報

    XAudio2 に関連するドキュメントをご覧ください。

    メディア ファンデーション

    Microsoft メディア ファンデーションは、オーディオとビデオの両方のメディア ファイルやストリームの再生用として設計されていますが、XAudio2 よりも高いレベルの機能が必要とされている場合や、追加のオーバーヘッドを許容できる場合にゲームで利用することもできます。

    使う状況

    メディア ファンデーションは、特に、ゲーム中の映画的なシーンや非対話型のコンポーネントに利用できます。 また、メディア ファンデーションは、XAudio2 を使って再生するオーディオ ファイルをデコードするのに便利です。

    詳細情報

    Microsoft メディア ファンデーションの概要」をご覧ください。

  • 入力: キーボード、マウス、ゲームパッド、その他のユーザー入力ソースからの入力に関する API です。

    API 説明
    XInput

    XInput ゲーム コント ローラー API によって、アプリケーションでゲーム コントローラーからの入力を受信できます。

    使う状況

    ゲームでゲームパッドからの入力をサポートする必要がある場合や、XInput のコードが既にある場合は、引き続き XInput を利用できます。 UWP の場合、XInput は Windows.Gaming.Input に置き換えられたため、新しい入力コードを記述する場合は、XInput ではなく Windows.Gaming.Input を使う必要があります。

    詳細情報

    XInput に関連するドキュメントをご覧ください。

    Windows.Gaming.Input

    Windows.Gaming.Input API は XInput を置き換える API であり、同じ機能を提供すると共に、XInput に比べて次のような利点があります。

    • リソースの使用量が少ない
    • 入力を取得するための API 呼び出しの待ち時間が短い
    • 同時に 4 つ以上のゲームパッドを処理する機能
    • トリガー バイブレーション モーターなど、追加の Xbox One ゲームパッド機能にアクセスする機能
    • コントローラー接続/切断をポーリングではなくイベントで通知する機能
    • 入力を特定のユーザー (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 名前空間では、Web サイトへのアクセスに利用できる、HTTP サーバーへの信頼性の高い接続を実現できます。

    使う状況

    ゲームで Web サイトにアクセスして情報を取得または保存する必要がある場合に、Windows.Web.HTTP を使います。

    詳細情報

    ゲームでのネットワークの使用」をご覧ください。

  • サポート ユーティリティ: Windows 10 API に基づいて構築されたライブラリです。

    ライブラリ 説明
    DirectX ツール キット

    DirectX ツール キット (DirectXTK) は、C++ で DirectX 11.x コードを作成するためのヘルパー クラスのコレクションです。

    使う状況

    C++ を使っている開発者がレガシ D3DX ユーティリティ コードに代わる最新のユーティリティを探している場合や、XNA Game Studio を使っている開発者がネイティブ C++ に移行する場合に、DirectX ツール キットを使います。

    詳細情報

    DirectX ツール キット プロジェクトのページ https://github.com/Microsoft/DirectXTK をご覧ください。

    Win2D

    Win2D は、即時モードの 2D グラフィックス レンダリング用の、使いやすい Windows ランタイム API です。

    使う状況

    C++ を使っている開発者が Direct2D と DirectWrite の使いやすい WinRT ラッパーを必要としている場合や、C# を使っている開発者が Direct2D と DirectWrite を使う必要がある場合に、Win2D を使います。

    詳細情報

    Win2D プロジェクトのページ https://github.com/Microsoft/Win2D をご覧ください。

Xbox Live サービス

Xbox Live 機能セット (Xbox とのクロス プレイ、達成度、ゲーマースコアなど) が Windows 10 でも利用できます。 近日中に、ID@Xbox を使って作業することによって、UWP ゲームに Live を含めることができるようになる予定です。 また、将来的には、お客様のユニバーサル アプリ プラットフォームのゲームを、Xbox One 向けにも出荷できるようにサポートする予定です。 詳しくは、ID@Xbox に関するページをご覧ください。

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 と経路探索エンジンは、ゲーム内でエージェントの動作を制御するためのフレームワークを提供します。
  • 特殊な用途のエンジン: インベントリ システムやダイアログ ツリーなど、発生する可能性があるほぼすべてのゲーム開発関連タスクを処理するために、さまざまな追加のエンジンが存在します。

ストアへのゲームの提出

ゲームを公開する準備ができたら、開発者アカウントを作成して、ゲームを Windows ストアに提出する必要があります。

Windows ストアへのゲームの提出については、https://dev.windows.com/publish をご覧ください。