今回はゲームプログラムを上達させる4つの方法について解説します。
- 1. 動いているコードを書き写す
- 2. 覚えたことをまとめる
- 3. ゲームをひたすら作る
- 4. ゲームエンジンを使わずにゲームを作る
オリジナルのゲームがなかなか作れない……という人に向けて、どうやったらゲームプログラムを身につけられるのかを説明するよ
目次
1. 動いているコードを書き写す
ゲームプログラムを上達するには、コードを書く必要があります。
これは何もプログラムに限った話ではなく、例えば、絵を上達するには長い時間をかけて絵を描き続ける必要があります。
一定の数をこなす | 基本を学ぶ | お手本を真似する | |
---|---|---|---|
絵がうまくなるには? | 絵をたくさん描く | デッサンをする | 模写する |
歌がうまくなるには? | 継続して練習する | ボイトレをする | 正しい音程・リズムが 取れている歌声を真似する |
プログラムを 上達させるには? | プログラムを書く | プログラムの動く仕組みやアルゴリズムを学ぶ | 動いているコードを書き写す |
歌がうまくなりたければ、継続して練習をする必要があります。
プログラムも同じで、たくさんプログラムを書くと上達します。
プログラムの時間を確保するには「時間管理」のスキルが必要ですが、まずは長い時間をかけて取り組む、という姿勢が大切となります
ただし、数をこなせばよいというわけではなく、このようなサイクルを回すことでより効率的に上達することができます。
まずはプログラムの基本を学ぶことからスタートしますが、基本をすべて覚えないと先に進めないわけではなく、手を動かしながら覚えるのがよいです。
そこで「お手本を真似る」という方法です。
チュートリアルやサンプルゲームのコードを自分で書き写してみます。
とにかく書き写せばいいのね!
それだけでは駄目です。手を動かしながら考える時間も作ることが必要です
プログラムコードを書き写すメリットとしては、書き写すにはそのコードを何度も見直すことになるため、動かなかった場合には間違いがどこなのかを調べ、そのコードを繰り返し読むことになります。
あとプログラム教本あるあるですが、ツールのバージョンで動作が異なって動かなかったり、そもそもお手本コードが誤字で間違っていることもあります。そういった場合に「どうやったらこのコードは動くのだろう?」と考えることになるので、そういったバグの調査や解決するためのドキュメントを調査する力、問題解決力のアップにも繋がります。
考えながらプログラムを書き写すコツとしては、例えば、そのコードに自分なりのコメントを入れたり、自分が良いと思う作りに変えてみるのも良いです。
なぜそういった作りになっているのか、そのコードがなぜ動くのかを考えます。
これらをすることで、書き写したコードであっても自分の技術として取り入れることができます。
他人のコードをコピペするだけではだめで、ちゃんと自分の頭で考えて理解することが大切、ということです。
2. 覚えたこと・理解したことをまとめる
プログラムに慣れないうちは、覚えることが多くてなかなか覚えられずに不安になることがあるかもしれません。
そういった場合は、自分が学んだことをブログにまとめるのがおすすめです。
QiitaやZenn、はてなブログなど、無料で始められる技術系のブログに、学んだことをどんどん書いていきます。
ブログに書くとなると、大したことがない技術や、間違ったことを書いたら怒られないか……?
と思われるかもしれないですが、個人のメモとして書いているブログに何か書き込みをされることはほとんどありません。
ですので、心配せずに学んだことをどんどん書いてしまって良いと思います。
どうしてもコメントされるのが気になる場合には、はてなブログではコメントを許可しない設定ができるので、はてなブログを使用するのが良いかもしれません。
記事を書くときの注意点ですが、サンプルコードをそのままのせると著作権上問題となりますので、部分的に抜き出したり、自分なりに解釈した書き方にする必要があります。
あと、最初はブログを書くことに時間がかかるかもしれませんが、時間をかけてしまって全然良いです。
なぜなら、時間をかけるということはそれに対して考える時間を費やしている、ということだからです。
プログラムは書くよりも考える時間のほうが長くなります。だから考えることに時間を使ったほうが、結果的にプログラム力は上がります。
さらに、こういった記事を書き残しておくことで、書いた内容を忘れたときに、改めて自分の書いた記事を見直して、技術を再確認することもできます。
自分専用のマニュアルを作ることができる……とも言えます。
ブログを書くのは少しむずかしいかもしれないから、まずは本に書き込んだり、付箋を貼ってみたり、簡単なメモを残すだけでも良いよ!
3. ゲームをひたすら作る
ゲームプログラムをする力は、結局、ゲームを作ることでしか身につきません。
ゲームを作らずに本を読んで知識を得るだけでは、本当の力は得られません。
ただ、慣れないうちは、規模の大きいゲームを作るよりは、小さいゲームをたくさん作るほうが効率が良いです。
というのも、規模の大きいゲームは作っている途中で挫折してしまう可能性が高いからです。
規模の大きいゲームを完成させれば、高い経験値を得ることができますが、完成できない場合はほぼ経験値は得られません。
また完成できないと、失敗したという経験により自信を失う可能性もあります。
小さいゲームであれば、完成までの難易度が低いぶん、経験値は少なめですが、成功体験により達成感を得ることができ、経験値を高い確率で得られます。
では、どのような小さいゲームを作ればよいのか……ということですが、
初心者が作ると勉強になるゲーム20選という記事でゲームプログラム初心者が作るのに最適な、小さい規模のゲームを紹介していますので、何を作ったら良いのかわからない場合はこちらが参考になると思います。
作りたいゲームが決まっていればそれを作るのが良いですが、その場合でも、なるべくゲームの要素をコンパクトに小さくして、まずは「完成させること」を重視したほうが挫折しにくくなります。
プログラムを覚えたら、あとは実践あるのみ!
最初は無理せず、小さいゲームから作り始めてくださいね
ある程度自由にゲームが作れるようになったら、「Game A Week」を試してみるのもいいかもしれません。
「Game A Week」の進め方については、こちらの動画
「ゲーム開発力を上げる『Game A Week』について解説します」で紹介しています。
また、こちらの記事も参考になるかもしれません。
Game A Weekの定義まとめ4. ゲームエンジンを使わずにゲームを作る
これはどちらかというと、ゲームプログラマーになりたい人向けです。
趣味のゲーム制作をするだけであれば、多くの場合はゲームエンジンでゲームを作るのが最適解です。
ゲームエンジンはプログラムの面倒な処理の大部分を引き取ってくれます。
ですが、商用のゲームを作る場合にはそういった面倒な部分をしっかり作り込む必要があります。
例えばハードウェアの性能を最大限まで引き出すようなチューニングをしたり、複雑なゲーム要素を破綻なく動作するようにしなければなりません。
また商用ゲーム開発でゲームエンジンを使う場合は、ゲームエンジンの内部処理をチューニングするケースもあるため、結局内部的な処理がどのようになっているかを理解する必要があります。
具体的な例として、Unreal Engineはコンシューマーゲーム開発でもよく使われますが、重要なゲームロジックはブループリントを使わずに C++ で書いたり、高速化のために Unreal Engineのソースコードを直接書き換えてビルドすることもあります。
そのとき、ゲームエンジンを自作した経験があれば、ある程度、内部的な処理も理解しやすいのではないかと思います。
可能であれば、ゲームエンジンが持っている機能を、ゲームエンジンを使わずに自作してみるのも良いでしょう。
車輪の再発明をすることも時には必要です
ゲームエンジンを使わないプログラムの勉強方法としては、DXライブラリ、DirectX、OpenGL、Siv3D、MonoGame、LibGDXといった、マルチメディアライブラリ、ゲームライブラリを使います。
それにより、ゲームエンジンが内部で肩代わりしている処理、画像やモデルの読み込みやアニメーション、ゲームオブジェクトの管理などを自分で実装しなければならなくなるので、プログラムの力をアップさせることができます。
ゲームプログラムの力をアップさせる方法としてはこのようになります。
- 動いているコードを書き写す
- 覚えたことをまとめる
- ゲームをひたすら作る
- ゲームエンジンを使わずにゲームを作る
なお、ゲームプログラムの上達にはプログラムの力だけでなく、「3Dグラフィックス数学」や「物理」などの知識も要求されます。
趣味のゲーム制作というより、ゲームプログラマーを目指す人に向けた話となりますが、「3Dグラフィックス数学」や「物理」は、プログラムをしているだけでは身につかないので、別途、本などで勉強する必要があります。
個人的には「ゲーム開発のための数学・物理学入門」「ゲームを動かす数学・物理R」「実例で学ぶゲーム3D数学」「DirectX 12の魔導書」あたりがおすすめとなります。
これらの本に書いてあることをすべて理解する必要はないですが、3Dグラフィックス数学の最低限の知識としては「三角関数」「ベクトル」「行列」を理解して、「透視投影」「ライティング」「モデルのアニメーション」の計算を理解することではないか……と思っています。
物理については、「速度・加速度」「摩擦」「衝突判定・応答」を理解してまずは「ビリヤード」を作ることでしょうか。また「衝突判定」には様々な形状の衝突を判定するアルゴリズムがあるので、ぜひそれらを一通り作ってみることをおすすめします。
- 円、矩形同士の当たり判定
- 三角形と線分の交差判定
- 線分と平面、板ポリゴンの交差判定
- OBB同士の当たり判定
- 球とレイの交差判定
- 8分木空間分割
また物理に自信があれば「クロスシミュレーション」や「IK」などを自作してみても良いかと思います。
本を買うお金がない……という方は
「ゲームつくろー!」さんのサイトには「DirectX」「シェーダー」「衝突判定」などゲームプログラマーに必要な情報が数多くまとめられていてとても勉強になります。
ここに書かれていることを少しずつ試してみるのも良いかもしれません。
■ゲームプログラムの勉強になるサイト
・ゲームつくろー!
http://marupeke296.com/GameMain.html
■数学の勉強になる動画
【ゆっくり解説】数学の見え方が変わる 「抽象と具体のベクトル数学 (線形代数)」【Voiceroid解説】
https://www.youtube.com/watch?v=dq4mq2ad0xI&list=FL4qj-GUtpw7z7Ody4K6VBXg
■技術系ブログ
・Qiita
https://qiita.com
・Zenn
https://zenn.dev
・はてなブログ
https://hatenablog.com
YouTube
今回記事にした内容を動画にしたものです。