ゲーム プロジェクトのセットアップSet up the game project

このトピックでは、Visual Studio でテンプレートを使用してシンプルな UWP DirectX ゲームを設定する方法について説明します。This topic goes through how to setup a simple UWP DirectX game using the templates in Visual Studio. ゲームを作るための最初の手順は、必要なコード インフラストラクチャ作業の量を最小限に抑えるように Microsoft Visual Studio でプロジェクトを設定することです。The first step in assembling your game is to set up a project in Microsoft Visual Studio in such a way that you minimize the amount of code infrastructure work you need to do. 適切なテンプレートを使い、ゲーム開発用にプロジェクトを構成することで、設定にかかる時間を大幅に節約できることを説明します。Learn to save set up time when you use the right template and configure the project specifically for game development.

目標Objectives

  • Visual Studio でテンプレートを使用して Direct3D ゲーム プロジェクトを設定するSet up a Direct3D game project in Visual Studio using a template
  • App ソース ファイル調べることによって、ゲームのメイン エントリ ポイントを理解するUnderstand the game's main entry point by examining the App source files
  • プロジェクトの package.appxmanifest ファイルを確認するReview the project's package.appxmanifest file
  • プロジェクトに含まれているゲーム開発ツールやサポートを調べるFind out what game dev tools and support are included with the project

ゲーム プロジェクトを設定する方法How to set up the game project

初めてユニバーサル Windows プラットフォーム (UWP) 向けの開発を行う場合は、Visual Studio でテンプレートを使用して、基本的なコード構造を設定することをお勧めします。If you're new to Universal Windows Platform (UWP) development, we recommend the use of templates in Visual Studio to set up the basic code structure.

注意

この記事は、ゲーム サンプルに基づく一連のチュートリアルの一部です。This article is part of a tutorial series based on a game sample. 最新のコードは、Direct3D ゲーム サンプルに関するページで入手できます。You can get the latest code at Direct3D game sample. このサンプルは、UWP 機能のサンプルの大規模なコレクションの一部です。This sample is part of a large collection of UWP feature samples. サンプルをダウンロードする手順については、「GitHub から UWP のサンプルを取得する」をご覧ください。For instructions on how to download the sample, see Get the UWP samples from GitHub.

DirectX テンプレートを使用してプロジェクトを作成するUse DirectX template to create a project

Visual Studio テンプレートは、優先する言語および技術に基づいて、特定の種類のアプリ向けの設定とコード ファイルを集めたものです。A Visual Studio template is a collection of settings and code files that target a specific type of app based on the preferred language and technology. Microsoft Visual Studio 2017 には多くのテンプレートがあり、これらを使うと、ゲームやグラフィックス アプリを簡単に開発することができます。In Microsoft Visual Studio 2017, you'll find a number of templates that can dramatically ease game and graphics app development. テンプレートを使わない場合、基本的なグラフィックス レンダリングや表示フレームワークの大部分を自分で開発しなければならず、これは新人のゲーム開発者にとっては骨の折れる仕事となります。If you don't use a template, you must develop much of the basic graphics rendering and display framework yourself, which can be a bit of a chore to a new game developer.

このチュートリアルで使用するテンプレートは、DirectX 11 アプリ (ユニバーサル Windows) です。The template used for this tutorial is titled DirectX 11 App (Universal Windows).

Visual Studio で DirectX 11 ゲーム プロジェクトを作成する手順を以下に示します。Steps to create a DirectX 11 game project in Visual Studio:

  1. [ファイル] > [新規作成] > [プロジェクト] の順に選択します。Select File... > New > Project...
  2. 左側のウィンドウで、[インストール済み] > [テンプレート] > [Visual C++] > [Windows ユニバーサル] の順に選択します。In the left pane, select Installed > Templates > Visual C++ > Windows Universal
  3. 中央のウィンドウで、[DirectX 11 アプリ (ユニバーサル Windows)] テンプレートを選びます。In the center pane, select DirectX 11 App (Universal Windows)
  4. ゲーム プロジェクトに名前を付けて、[OK] をクリックします。Give your game project a name, and click OK.

新しいゲーム プロジェクトを作成するための DirectX 11 テンプレートを選択する方法を示すスクリーン ショット

このテンプレートは、DirectX と C++ を使った UWP アプリの基本的なフレームワークを提供します。This template provides you with the basic framework for a UWP app using DirectX with C++. F5 キーを押して、アプリをビルドし、実行します。Click F5 to build and run it. パウダー ブルーの画面を確認します。Check out that powder blue screen. このテンプレートは、DirectX と C++ を使った UWP アプリの基本的な機能が含まれているコード ファイルを複数作成します。The template creates multiple code files containing the basic functionality for a UWP app using DirectX with C++.

IFrameworkView を理解することによりアプリのメイン エントリ ポイントを確認するReview the app's main entry point by understanding IFrameworkView

App クラスは IFrameworkView クラスを継承します。The App class inherits from the IFrameworkView class.

App.h を調べるInspect App.h.

ビュー プロバイダーを定義する IFrameworkView インターフェイスを実装する際に使用される、App.h の 5 つのメソッド、InitializeSetWindowLoadRunUninitialize について簡単に説明します。Let's quickly look at the 5 methods in App.hInitialize, SetWindow, Load, Run, and Uninitialize when implementing the IFrameworkView interface that defines a view provider. これらのメソッドはゲームの起動時に作成されるアプリ シングルトンによって実行され、適切なイベント ハンドラーに接続されて、アプリのすべてのリソースが読み込まれます。These methods are run by the app singleton that is created when your game is launched, and load all your app's resources as well as connect the appropriate event handlers.

    // Main entry point for our app. Connects the app with the Windows shell and handle application lifecycle events.
    ref class App sealed : public Windows::ApplicationModel::Core::IFrameworkView
    {
    public:
        App();

        // IFrameworkView Methods.
        virtual void Initialize(Windows::ApplicationModel::Core::CoreApplicationView^ applicationView);
        virtual void SetWindow(Windows::UI::Core::CoreWindow^ window);
        virtual void Load(Platform::String^ entryPoint);
        virtual void Run();
        virtual void Uninitialize();

    protected:
        ...
    };

App.cpp を調べるInspect App.cpp

App.cpp ソース ファイル内の main メソッドを以下に示します。Here's the main method in the App.cpp source file:

//The main function is only used to initialize our IFrameworkView class.
[Platform::MTAThread]
int main(Platform::Array<Platform::String^>^)
{
    auto direct3DApplicationSource = ref new Direct3DApplicationSource();
    CoreApplication::Run(direct3DApplicationSource);
    return 0;
}

このメソッドでは、ビュー プロバイダー ファクトリから Direct3D ビュー プロバイダーのインスタンスが作成され (App.h で定義された Direct3DApplicationSource)、CoreApplication::Run を呼び出すことによってアプリ シングルトンに渡されます。In this method, it creates an instance of the Direct3D view provider from the view provider factory (Direct3DApplicationSource, defined in App.h), and passes it to the app singleton by calling (CoreApplication::Run). つまり、ゲームの出発点は、IFrameworkView::Run メソッドの実装の本文にあります (この場合は App::Run)。This means that the starting point for your game lives in the body of the implementation of the IFrameworkView::Run method, and in this case, it's the App::Run.

App.cpp 内でスクロールして App::Run メソッドを見つけます。Scroll to find the App::Run method in App.cpp. コードは次のようになります。Here's the code:

//This method is called after the window becomes active.
void App::Run()
{
    while (!m_windowClosed)
    {
        if (m_windowVisible)
        {
            CoreWindow::GetForCurrentThread()->Dispatcher->ProcessEvents(CoreProcessEventsOption::ProcessAllIfPresent);

            m_main->Update();

            if (m_main->Render())
            {
                m_deviceResources->Present();
            }
        }
        else
        {
            CoreWindow::GetForCurrentThread()->Dispatcher->ProcessEvents(CoreProcessEventsOption::ProcessOneAndAllPending);
        }
    }
}

このメソッドでは、ゲームのウィンドウを閉じなければ、すべてのイベントがディスパッチされ、タイマーが更新され、グラフィックス パイプラインの結果がレンダリングされて表示されます。What this method does: If the window for your game isn't closed, it dispatches all events, updates the timer, then renders and presents the results of your graphics pipeline. これについては、「UWP アプリ フレームワークの定義」、「レンダリング フレームワーク I: レンダリングの概要」、「レンダリング フレームワーク II: ゲームのレンダリング」で詳しく説明します。We'll talk about this in greater detail in Define the UWP app framework, Rendering framework I: Intro to rendering, and Rendering framework II: Game rendering. これで、UWP DirectX ゲームのコードの基本構造については理解できました。At this point, you should have a sense of the basic code structure of a UWP DirectX game.

package.appxmanifest ファイルを確認して更新するReview and update the package.appxmanifest file

テンプレートに含まれるのはコード ファイルだけではありません。The code files aren't all there is to the template. Package.appxmanifest ファイルには、ゲームのパッケージ化と起動や Microsoft Store への提出に使うプロジェクトのメタデータが含まれます。The Package.appxmanifest file contains metadata about your project that are used for packaging and launching your game and for submission to the Microsoft Store. プレイヤーのシステムがゲームの実行に必要なリソースへのアクセスを提供するための、重要な情報も含まれます。It also contains important info the player's system uses to provide access to the system resources the game needs to run.

ソリューション エクスプローラーPackage.appxmanifest ファイルをダブルクリックして、マニフェスト デザイナーを起動します。Launch the manifest designer by double-clicking the Package.appxmanifest file in Solution Explorer.

package.appxmanifest エディターのスクリーンショット。

package.appxmanifest ファイルとパッケージ化について詳しくは、マニフェスト デザイナーに関するページをご覧ください。For more info about the package.appxmanifest file and packaging, see Manifest Designer. それでは、[機能] タブとそのオプションを見てみましょう。For now, take a look at the Capabilities tab and look at the options provided.

Direct3D アプリの既定の機能のスクリーンショット。

グローバルなハイ スコア ボードのためのインターネットへのアクセスなど、ゲームで使う機能を選択しないと、該当するリソースや機能にアクセスできません。If you don't select the capabilities that your game uses, such as access to the Internet for global high score board, you won't be able to access the corresponding resources or features. 新しいゲームを作る場合、ゲームの実行に必要な機能を忘れずに選択してください。When you create a new game, make sure that you select the capabilities that your game needs to run!

次に、DirectX 11 アプリ (ユニバーサル Windows) テンプレートの残りのファイルを見てみましょう。Now, let's look at the rest of the files that come with the DirectX 11 App (Universal Windows) template.

含まれているライブラリとヘッダーを確認するReview the included libraries and headers

まだ確認していないファイルがいくつかあります。There are a few files we haven't looked at yet. それは、Direct3D ゲーム開発シナリオに共通するその他のツールとサポートを提供するファイルです。These files provide additional tools and support common to Direct3D game development scenarios. 基本的な DirectX ゲーム プロジェクトに付属しているすべてのファイルの一覧については、「DirectX ゲーム プロジェクト テンプレート」を参照してください。For the full list of files that comes with the basic DirectX game project, see DirectX game project templates.

テンプレート ソース ファイルTemplate Source File ファイル フォルダーFile folder 説明Description
DeviceResources.h/.cppDeviceResources.h/.cpp CommonCommon すべての DirectX デバイス リソースを制御するクラス オブジェクトを定義します。Defines a class object that controls all DirectX device resources. デバイスが消失または作成されたときに通知される DeviceResources を所有しているアプリケーションのインターフェイスも含まれています。It also includes an interface for your application that owns DeviceResources to be notified when the device is lost or created.
DirectXHelper.hDirectXHelper.h CommonCommon DX::ThrowIfFailedReadDataAsyncConvertDipsToPixels などのメソッドを実装します。Implements methods including **DX::ThrowIfFailed, ReadDataAsync, and ConvertDipsToPixels. DX::ThrowIfFailed** は、DirectX Win32 API によって返されたエラー HRESULT 値を Windows ランタイム例外に変換します。DX::ThrowIfFailed converts the error HRESULT values returned by DirectX Win32 APIs into Windows Runtime exceptions. このメソッドを使って、DirectX エラーをデバッグするためのブレーク ポイントを配置します。Use this method to put a break point for debugging DirectX errors. 詳しくは、ThrowIfFailed をご覧ください。For more information, see ThrowIfFailed. ReadDataAsync は、バイナリ ファイルから非同期的に読み取ります。ReadDataAsync reads from a binary file asynchronously. ConvertDipsToPixels は、デバイスに依存しないピクセル (DIP) 単位の長さを物理ピクセル単位の長さに変換します。ConvertDipsToPixels converts a length in device-independent pixels (DIPs) to a length in physical pixels.
StepTimer.hStepTimer.h CommonCommon ゲーム アプリまたは対話型レンダリング アプリで役に立つ、高分解能タイマーを定義します。Defines a high-resolution timer useful for gaming or interactive rendering apps.
Sample3DSceneRenderer.h/.cppSample3DSceneRenderer.h/.cpp ContentContent 基本的なレンダリング パイプラインのインスタンスを作成するクラス オブジェクトを定義します。Defines a class object to instantiate a basic rendering pipeline. DirectX を使った UWP に Direct3D スワップ チェーンとグラフィックス アダプターを接続する基本的なレンダラー実装を作成します。It creates a basic renderer implementation that connects a Direct3D swap chain and graphics adapter to your UWP using DirectX.
SampleFPSTextRenderer.h/.cppSampleFPSTextRenderer.h/.cpp ContentContent Direct2D と DirectWrite を使って画面の右下隅に現在の FPS (1 秒あたりのフレーム数) 値をレンダリングするクラス オブジェクトを定義します。Defines a class object to render the current frames per second (FPS) value in the bottom right corner of the screen using Direct2D and DirectWrite.
SamplePixelShader.hlslSamplePixelShader.hlsl ContentContent 非常に基本的なピクセル シェーダー用の上位レベル シェーダー言語 (HLSL) コードが含まれます。Contains the high-level shader language (HLSL) code for a very basic pixel shader.
SampleVertexShader.hlslSampleVertexShader.hlsl ContentContent 非常に基本的な頂点シェーダー用の上位レベル シェーダー言語 (HLSL) コードが含まれます。Contains the high-level shader language (HLSL) code for a very basic vertex shader.
ShaderStructures.hShaderStructures.h ContentContent MVP 行列と頂点単位のデータを頂点シェーダーに送信するために使用できるシェーダー構造体が含まれています。Contains shader structures that can be used to send MVP matrices and per-vertex data to the vertex shader.
pch.h/.cpppch.h/.cpp MainMain DirectX 11 API など、Direct3D アプリで使われる API 用のすべての Windows システム インクルードが含まれます。Contains all the Windows system includes for the APIs used by a Direct3D app, including the DirectX 11 APIs.

次の手順Next steps

これで、DirectX 11 アプリ (ユニバーサル Windows) テンプレートを使用して UWP DirectX ゲーム プロジェクトを作成する方法と、このプロジェクトで提供されるいくつかのコンポーネントとファイルについての説明が終わりました。At this point, you've learnt how to create a UWP DirectX game project using the DirectX 11 App (Universal Windows) template and have been introduced to a few components and files provided by this project.

次のセクションは、「ゲームのユニバーサル Windows プラットフォーム (UWP) アプリ フレームワークの定義」です。The next section is Defining the game's UWP framework. テンプレートで提供される概念やコンポーネントの多くを、このゲームでどのように使用し、拡張しているかについて説明します。We'll examine how this game uses and extends many of the concepts and components that the template provides.