こちらでは、3Dゲーム開発のための技術・実装方法をまとめていきます。
まずは3Dゲーム開発の最も主要な開発環境であるVisual Studioでのプロジェクト用意をしていきます。
3Dゲーム開発記事のまとめ:「3Dゲーム開発」
WindowsPC環境で作成
ハイエンドゲーム開発は基本WindowsPC上で行うのが主流です。
大きな理由としては
- 最新のグラフィクスライブラリ「DirectX」が利用できるのがWindows
- PC向けゲームの普及もありPC版をベースに開発
- 他コンソールも作りがPCに似てきておりPC版をベースに移植はしやすくなっている
といったところです。
Visual Studioをインストール
そしてWindowsPC上での最も標準的なゲーム開発環境がMicrosoft社の「Visual Studio」です。
Visual Studioは、標準で強力な補完や編集機能のついたエディタや、デバッガ、バージョン管理(Git)などの機能が搭載された統合開発環境。
プラグインで機能拡張も可能で、PCゲーム開発、コンソールゲーム開発、スマホアプリ開発も可能な環境です。
Community(コミュニティ)版が個人では無償利用可能なバージョンとなるので、最新のコミュニティ版をダウンロードしましょう。
以下からダウンロード可能で、現在は Visual Studio 2022(VS2022)が最新版なのでそちらを取得しましょう。
ダウンロードしたら、インストーラーの指示に従い、以下のようなC++ゲーム開発に近しい項目を選択してインストールします。
基本的には「C++によるゲーム開発」「C++によるデスクトップ開発」があればWindows上で動かすVisual C++によるゲーム開発は可能です。
ただ、ここでは「ユニバーサルWindows プラットフォーム開発」とそのオプション「C++(v143)ユニバーサルWindowsプラットフォームツール」も入れています。
こちら容量は食う(10GBくらい)のですが、このツールがあるとVSのプロジェクト作成時に、DirectXの初期設定済みでサンプル描画までしてくれるテンプレートが使えるので、容量に余裕がれば入れておきましょう。
本記事連載で使う想定はないですが、あると便利です。
Visual Studioでプロジェクト作成
VisualStudio(VS)が使えるようになったら、いよいよ製作開始。
まずはプログラムをまとめる単位となるプロジェクトを作成します。
VisualStudioのウィザードで空のC++プロジェクト作成
VisualStudioを起動して出てくるウィザードから↓のように選択して、空の新規プロジェクトを作成します。
- 新しいプロジェクトの作成を選択
- C++ 空のプロジェクトを選択
- ソリューション名・プロジェクト名を自由に設定して作成(GameDevなど)
こちらではソリューション名を「GameDev」、プロジェクトは段階的に区切っていくため「00-ShowWindow」として作成しています(合わせなくてもよいです)。
プロジェクトの設定をx64に
プロジェクト設定をx64(64bitアプリ構成)にしていきます。
デフォルトがx86(32bitアプリ)となっているので、VisualStudioの上部のメニューからx64に切り替えます。
現在はもう64bit環境が主流、特にゲーム開発では使うメモリも多いことなどもあり、64bitアプリとして開発するのが基本となります。
エントリポイント(main関数)の作成
プログラムの起点となるエントリポイント、いわゆる「main関数」をまずは作ります。
WinMain関数で実装
まず新規ファイル追加でmain.cpp
を追加し、以下のコードを実装します。
C++は main()
関数がエントリポイントとなるのが基本ですが、Windowsのゲーム実行のためには以下の特殊なWinMain関数を実装します。
#include <Windows.h>
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR, int)
{
return 0;
}
Gameは当然ながら文字列コンソールでプレイするわけではなく、Windowsであれば、アプリウィンドウを作成してそこに描画して、グラフィカルなプログラムを動かしていきます。
その実行しているアプリウィンドウに対して処理を紐付ける必要があり、その紐付けが可能なWindowsが提供する上記WinMain関数を利用します。
参考:WinMain: アプリケーション エントリ ポイント
main関数のLinkエラー対処
上記が最小限のWindowsアプリの実装コードですが、これをビルドすると、
1>MSVCRTD.lib(exe_main.obj) : error LNK2019: 未解決の外部シンボル _main が関数 "int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ) で参照されました
1>C:UsersKeitaprojgamedevGameDevDebug1-ShowWindow.exe : fatal error LNK1120: 1 件の未解決の外部参照
といったエラーが出ると思います。
これは、main関数が見つからないことでのリンクエラーです。
上記の通り、WinMainはWindows用の特殊なmain関数なので、コンパイル時にWinMainをエントリポイントとすることを教えて上げる必要があります。
その指定代わりとなるのが、プロジェクトを右クリックで開くプロパティページで
リンカー → システム → サブシステム で「Windows(/SUBSYSTEM:WINDOWS)」を選択(↓画像)
となります。この選択を忘れないようにしましょう。また、この設定は「すべての構成」「すべてのプラットフォーム」に設定しておきましょう。
なお、プロジェクト作成時に、Windowsデスクトップウィザードによるテンプレート選択を使うことで自動的にこの設定を有効にもできます。
今回は、WinMainという意味の簡単な解釈も込めて、マニュアルで指定して対応しています。

参考:main関数でも実行可能
Windows上でウィンドウ表示するアプリは基本的にWinMainを使う(アプリの紐づけ「HINSTANCE hInst
」がほしいので)、という認識でしたが、実際はWinMain必須でもないようです。
というのもHINSTANCEは、GetModuleHandle(nullptr)
でも取得が可能。
ウィンドウ表示などでHINSTANCE変数が必要になるのですが、↑こちらのAPIを利用すればWinMainからのhInstを使わずともウィンドウ表示が同様に可能。
つまりは、通常のmain関数でのエントリポイントでもウィンドウ表示していくことも可能、ということになります。
実行成功
上記リンクエラーを回避できれば、ひとまずプログラムが起動して即終了(起動は一瞬だけです)するのが確認できます。
ひとまずこれでWindowsアプリを実行する、という準備ができました。
次回は、Windows上でゲームを動かすベースのベースである、Windowの表示をしていきます。

コメント
[…] 前回の記事:「【3Dゲーム開発.00】VisualStudioプロジェクトの作成」 […]
[…] 前回の記事:「【3Dゲーム開発.00】VisualStudioプロジェクトの作成」 […]