はじめまして、ゲーム制作でプログラミングを担当するさそうです。
今回からゲーム制作日誌と称して、ゲームプログラミングについての記事を書いていきたいと思います。ゲームを作る際に必要だった知識や考えたことなど、自分自身が今回はじめてゲームプログラミングをして経験したことを元にまとめていきます。私は、プログラミングが趣味なだけの実力しかないため今後書く記事には間違いや遠回りな実装等問題点があるかもしれません。そこはあたたかい目で見守っていただき、あくまでゲーム制作の参考にしていただければ幸いです。
長い前置きはさておき、さっそく第1記を始めていきます。
1、言語の選択
ゲームのプログラミングをする際には、まずプログラムを記述するプログラミング言語を選択する必要があります。言語を選ぶ条件としていくつかあると思います。
「2」の条件については、実現したい内容にもよると思います。しかし、コードが完成した後に言語の実行速度の遅さのためにカックカクのゲームになってしまった・・・、なんて事態は想像したくもありません。
「3」の条件は主に自分自身のモチベーションにかかわります。ゲームが完成するまで付き合う言語は、自分と気が合うものを選びたいです。
以上の条件は、私自身が言語を選んだときの主な理由でもあります。今回のゲーム制作では、C#を用いることに決めました。そのため以降の内容はC#を前提とした話に傾いていくかもしれません。(また前置きを仕掛けてしまった・・・)
2、必要なライブラリの決定
「1」でも若干ふれましたが、ゲームプログラムには「プレイヤーからの入力」と「それに対する反応」が必要です。具体的にいうと、キーボード・マウス・ゲームパッドからの入力感知、ディスプレイへの描画機能、音楽の再生機能のことです。これらの機能は、そのままのプログラミング言語側では通常利用できないのでライブラリを介して機能を利用する必要があります。
そのライブラリには多くの種類がありますが、現在主に使われているらしいものの中で2通りに分けられます。
今回のゲーム制作では、DirectX系の「SharpDX」を用いることにしました。
DXライブラリ等のモデル、文字描画、音楽再生を全部やってくれるようなライブラリを使えば、プログラミングを楽になると思いますが今回はゲームプログラングの基本から学習したかったため、便利機能のほんとどない純粋なDirectXに近い「SharpDX」を選びました。
以前、おなじく純粋でしかもMicrosoft社謹製の「Managed DirectX」を使ってみたことがありますが、作成中に不具合が多くあり「これじゃ使えないじゃないか!」ということで方向転換を余儀なくされました。このライブラリの開発は終了しており、修正される見込みもないので皆さんも使うのは控えたほうがいいかもしれません。
また、「SlimDX」という「SharpDX」に非常に似たライブラリも存在するのですが、そちらはプログラムを実行するために必要な依存プログラムがいくつか必要で、また「SharpDX」のほうが高速だという噂があります。
3、まずは何から手を付けるか
もう何度も書きましたが、基本的にゲームはプレイヤーの入力を受け、それに対して画面表示や音楽で反応するプログラムです。つまり、プログラムを3つの部門に分けることができます。
いろいろなゲームの場面を思い出してもこの3つの手順に当てはめることができるはずです。つまり、この3つ部門が完成してしまえば、ゲームは完成です。
さらに気づくことは、部門「1」と部門「3」のやってくれることはゲームが変わっても変わらないということです。プレイヤーがキーボードやマウスを押しているか確認する方法はどんなゲームでも同じでよいし、音楽の再生の仕方もしかり、画面表示もモデル・文字・絵の描画と細かく分ければ基本的にすることは変わりません。
この部門「1」と部門「3」はどんなゲームでも変わらないということは、一度作ってしまえば他のゲームにも再利用できるということです。
そこで、ゲーム制作の手始めとして、「入力を調べる機能」「画面に描画する機能」「音楽を再生する機能」を作ることにしましょう。
次回からはそれら機能の実装を目指していきます。
4、まとめ
今回の内容をまとめてみました。
今回からゲーム制作日誌と称して、ゲームプログラミングについての記事を書いていきたいと思います。ゲームを作る際に必要だった知識や考えたことなど、自分自身が今回はじめてゲームプログラミングをして経験したことを元にまとめていきます。私は、プログラミングが趣味なだけの実力しかないため今後書く記事には間違いや遠回りな実装等問題点があるかもしれません。そこはあたたかい目で見守っていただき、あくまでゲーム制作の参考にしていただければ幸いです。
長い前置きはさておき、さっそく第1記を始めていきます。
1、言語の選択
ゲームのプログラミングをする際には、まずプログラムを記述するプログラミング言語を選択する必要があります。言語を選ぶ条件としていくつかあると思います。
- 画面への描画、音楽の再現、キーボード・マウスからの入力に対応できるか
- ある程度の実行スピードが確保できるか
- 自分にあっている言語か
「2」の条件については、実現したい内容にもよると思います。しかし、コードが完成した後に言語の実行速度の遅さのためにカックカクのゲームになってしまった・・・、なんて事態は想像したくもありません。
「3」の条件は主に自分自身のモチベーションにかかわります。ゲームが完成するまで付き合う言語は、自分と気が合うものを選びたいです。
以上の条件は、私自身が言語を選んだときの主な理由でもあります。今回のゲーム制作では、C#を用いることに決めました。そのため以降の内容はC#を前提とした話に傾いていくかもしれません。(また前置きを仕掛けてしまった・・・)
2、必要なライブラリの決定
「1」でも若干ふれましたが、ゲームプログラムには「プレイヤーからの入力」と「それに対する反応」が必要です。具体的にいうと、キーボード・マウス・ゲームパッドからの入力感知、ディスプレイへの描画機能、音楽の再生機能のことです。これらの機能は、そのままのプログラミング言語側では通常利用できないのでライブラリを介して機能を利用する必要があります。
そのライブラリには多くの種類がありますが、現在主に使われているらしいものの中で2通りに分けられます。
- DirectX系
Microsoft社が開発した描画・入力・音楽に一括に対応するAPI群をDirectXといいます。
このDirectXの売りは、異常なまでに高速な描画速度とバージョン更新の速さだと思います。
欠点としては、基本的にWindows上でしか利用することが挙げられます。
主にゲーム開発に使われているそうでPCゲームの多くやXboxゲームでも利用されています。
派生ライブラリ例:
DXライブラリ、Managed DirectX(注)、SlimDX、SharpDX
- OpenGL系
もともとはSGI社が開発していたシステムを移植してできた描画APIのことです。
このOpenGLのすごいところは、様々なOS上で動作することです。DirectXのような、Windowsだけというような制限はありません。
もともと、ゲーム用途として開発されたわけではないので高速な描画よりも正確な描画を目指しているようです。
C#でも利用することができ、派生ライブラリ例としては、数々のものがあります
今回のゲーム制作では、DirectX系の「SharpDX」を用いることにしました。
DXライブラリ等のモデル、文字描画、音楽再生を全部やってくれるようなライブラリを使えば、プログラミングを楽になると思いますが今回はゲームプログラングの基本から学習したかったため、便利機能のほんとどない純粋なDirectXに近い「SharpDX」を選びました。
以前、おなじく純粋でしかもMicrosoft社謹製の「Managed DirectX」を使ってみたことがありますが、作成中に不具合が多くあり「これじゃ使えないじゃないか!」ということで方向転換を余儀なくされました。このライブラリの開発は終了しており、修正される見込みもないので皆さんも使うのは控えたほうがいいかもしれません。
また、「SlimDX」という「SharpDX」に非常に似たライブラリも存在するのですが、そちらはプログラムを実行するために必要な依存プログラムがいくつか必要で、また「SharpDX」のほうが高速だという噂があります。
3、まずは何から手を付けるか
もう何度も書きましたが、基本的にゲームはプレイヤーの入力を受け、それに対して画面表示や音楽で反応するプログラムです。つまり、プログラムを3つの部門に分けることができます。
- プレイヤーの入力を受け取る部門
- 入力に対する反応を考える部門
- 反応を画面表示や音楽で再現する部門
- プログラムが、部門「1」にゲームパッドのスティックが倒されているか聞く
↓ - 倒されているとわかったら、プログラムは部門「2」に何が起こるのか考えさせる。(この場合はプレイヤーの移動が結果になる)
↓ - プログラムは、部門「2」が考えた結果(プレイヤーの移動)を部門「3」に依頼して再現させる
いろいろなゲームの場面を思い出してもこの3つの手順に当てはめることができるはずです。つまり、この3つ部門が完成してしまえば、ゲームは完成です。
さらに気づくことは、部門「1」と部門「3」のやってくれることはゲームが変わっても変わらないということです。プレイヤーがキーボードやマウスを押しているか確認する方法はどんなゲームでも同じでよいし、音楽の再生の仕方もしかり、画面表示もモデル・文字・絵の描画と細かく分ければ基本的にすることは変わりません。
この部門「1」と部門「3」はどんなゲームでも変わらないということは、一度作ってしまえば他のゲームにも再利用できるということです。
そこで、ゲーム制作の手始めとして、「入力を調べる機能」「画面に描画する機能」「音楽を再生する機能」を作ることにしましょう。
次回からはそれら機能の実装を目指していきます。
4、まとめ
今回の内容をまとめてみました。
- ゲームプログラミングと自分にあった言語を選ぶ
- 言語単体では、入力・描画・音楽を扱えないためライブラリを見つける
- 入力・描画・音楽に関するプログラムの内容は全てのゲームで共通なため、一度作れば2つめ3つめを作るときに楽になる
今回の内容は、「ゲームを作る」というよりもどちらかというと考えることしかしてなかったため、抽象的な記事で楽しくない記事になってしましました。次回以降は、もっとゲームを作ってることが実感できるような記事になるといいなと思います。
とにかくがんばります。