「エンジンに頼らず一からプログラミングしてるんだ~♪」(by ねねっち[アニメ「NewGame」より])
いいこというじゃない、ねねっち。
そんなわけで今回は、エンジンに頼らないで、ゲーム開発の地力を得るために必要なおすすめ技術書の数々をご紹介。Unreal EngineやUnityを使って開発する場合は、こんな記事よりもパッチノートを熟読した方が有益かもしれませんよ。
ではいってみましょう。
(編集後記:こんなに書くつもりじゃなかったのに書き出したら紹介したくなって大作(長文)になってしまった・・)
発売したて・発売予定の新書をピックアップ
技術書は情報の鮮度も重要、人気ランキングの前に新しい書籍もチェックしておきましょう。
- 2022/12/20発売 「Unityではじめる機械学習・強化学習 Unity ML-Agents 実践ゲームプログラミング v2.2対応版」
- 2023/01/26発売 「Pythonで書くシンプルなゲームプログラミング: Pythonで学ぶゲームプログラミングの基礎」
- 2023/09/26発売 「オブジェクト指向でつくるPythonゲームプログラミング」
- 2023/10/06発売 「DEFOLD ゲームエンジンで2Dゲームクロス開発第1回中級入門 DEFOLD入門」
- 2023/12/30発売 「9. Haxeとゲームプログラミング: ゲームループと基本的なアニメーションの実装: Haxeを使って基本的なゲームループとアニメーションを理解し、自分のゲームを作ろう」
ゲームが動く根本原理を理解する
ゲームプログラマになる前に覚えておきたい技術
ゲーム開発の基礎から、ゲーム開発で考慮すべきC++のポイント、3D座標変換の計算の本質、コリジョン判定、骨アニメーション、データ化・・・などゲーム開発するにあたって身につけておきたい一通りの知識が幅広く、そして根本原理から得られる超有益な本です。
8年前、ゲーム業界で働き始める直前に僕自身がゲーム作りの根本を学んだ本です。そのタイミングでこの本が発売されていたことは今思えば幸せでした。昔は、2Dゲーム作りから始まり、ハードウェアの進化ととも技術をアップデートし、自然とこういった知識を身につけていったと思います。今は、3Dゲームを作るとなると、いきなりこれらの知識全般とぶつかることになります。そういった知識が、根本原理から順序立てて解説されてます。
9年前の本ではありますが、ゲーム作りの根本的・普遍的な内容ですので、いまだに間違いなく有益な本です。このレベルで根本まで噛み砕いて解説してくれている本は他にありません。まさしく、エンジンに頼らないでゲーム作りできる技術力を身に付けたいのであれば必読の一冊です。逆にエンジンを使ってゲームロジック実装のみに集中したいのであれば無用の長物となるでしょう。
現場で使えるゲーム開発の全般知識を得る
ゲームエンジン・アーキテクチャ(第3版)
(2020/12/13 第3版が発売となりました)
「ゲームプログラマになる前に覚えておきたい技術」に並んで、必読な本。ただし、ゲーム開発初心者が読むには多少敷居が高いです。
タイトルからするとゲームエンジンを作るための本とも思いがちですが、ゲームエンジンを作るためにも必須なゲーム開発全般の知識を詰め込んだ本です。UnityやUnrealEngineはどうやったら作れるかということではありません。そういったゲームエンジンを作るための前提知識、すなわち、ゲーム作りの基本の知識です。
前半では、C++やMath(数学)、開発環境やデバッグ、並列化といった、ゲーム開発に当たってのベースの知識が比較的最近の事例として解説されており、今読んでも問題ない内容です。また、後半では、グラフィクス、アニメーション、物理といった比較的高度な専門知識を必要とする内容を、浅すぎずかつ実用的に解説しています。開発内容によりますが、ここの知識だけでも事足りることも多いかもしれないです。終盤では、ゲームエディタとして必要な要素や、ゲームループの実装、オブジェクトの実装などより上のレイヤーのゲームのフレームワーク実装について解説されています。継承ベースではなくコンポジション指向で実装する方法など、近年の変更に耐えられるゲームコード実装方針などの知識も詰まっています。
個人開発でもいいのでゲーム開発のフローを少し体験してから読むと、それまでよくわからなかった部分や、浅かった知識を深めるのを手助けしてくれる有益な本となるでしょう。
ゲームエンジンアーキテクチャ第3版については、以下で簡易レビューも紹介しています。
ゲームコーディング・コンプリート
こちらもゲーム開発にあたって必要な知識を網羅的に取り扱っている本。同様に、C++やMath、グラフィックなどゲーム開発に必要な幅広い内容を解説しています。ただし少し内容が古いです(日本語版で2010年発売。原著はもっと前)。ゲーム開発は、ベースの部分は普遍的な、数学やC++の低レベルな部分の知識が前提となるのは、昔から変わりないので、役に立つ部分はいまだに多いですが、開発環境や、最近のテクニック的な部分は古い内容なのは否めません。
まずは、上記した2冊(ゲームプログラマになる前に覚えておきたい技術、ゲームエンジン・アーキテクチャ)を読んで余裕があれば眺めて、有用そうな知識を吸収すると良いです。
現場で使えるゲーム開発コードパターンを知る
ゲームプログラマのためのC++
ゲームプログラムに必要な観点(60FPS維持やイテレーションを早めるなど)からC++の各要素(継承、テンプレート、例外)の使用方法やその注意点、メモリの取り扱い、STLやデザインパターンを考慮した実装パターンの解説など、現場で扱われる問題やテクニックが多く解説されています。
C++は低レベルな操作が可能な高級言語ですが、その性能を活かすも殺すも使用者次第です。C++をゲーム開発に活かすための知識が詰め込まれた良書です。
Game Programming Patterns
デザインパターンをゲームで使うシチュエーションに当てはめて解説したり、ゲーム向けのGoFにはまらないパターンを挙げています。
変更に強くする設計パターンや、データ駆動実装するためのパターンなど、ゲーム実装をフレキシブルにする例がいくつかパターンとして紹介されています。個人的にバイトコードパターンがデータ駆動の可能性を大きく広げてくれて、好きです。
また、最適化、負荷軽減という部分を考慮したパターン解説などもあります。昨今は最適化といえば、必ずといっていいほど触れられるキャッシュミスを減らすためのパターンなども紹介されています。
ゲーム開発のイロハがつかめてきた後に読むと、さらに実装パターンの幅が広がって良いです。
Robert Nystrom, 武舎広幸, 阿部和也, 上西昌弘 (インプレス)
発売日 2015/09/24
デザインパターン系の本
本家デザインパターンの本も何か1冊は読んでおいて損はありません。ただ、勘違いしてはいけないのは、デザインパターンは魔法の道具ではありません。実際大したことをやっているわけではありません。それ普通に実装で取り入れてたわ、なんてパターンが結構多いです。安全かつ変更に強く、といったことを心がけて普段からしっかりと設計し、スキルがありそうな人のコードを読むなどしていれば自然と身についていることが多いですし、そうあるべきだと思います。
本でこんなパターンがある、といわれてもピンと来づらいものです。必要なときに自分で考えぬいて適用した方が身につきます。デザインパターンの本を読んで、あぁこれね、ってゆう答え合わせになるのが理想だと思います。
ではなぜ読むのかというと、よくいわれているのが、共通の名前が着くことで、会話・意思疎通がしやすくなるというメリットです。他の人、例えば後輩ができたときに、「よくあるあれをこうするやつ・・」みたいな抽象的ないいかたをせずとも、デザインパターンの〇〇で設計すると安定する、なんて会話ができるのがメリットです。
で、実際の本ですが、僕自身は独習デザインパターンを読みました(例がC++だったという理由だけ)が、悪いほどではないですがわかりやすいとは言い難いです。結城浩さんの本↓が評判良かった気がします。
現場で使う数学処理を知っておく
数学の知識は、あらかじめ読んでおくと理解は深まりますが、実際には使うタイミングでリファレンス的にみることのほうが多いと思います。
実例で学ぶゲーム3D数学
数学に関しては、基本はこれがあれば問題ないかと思います。2Dも3Dも変換処理載っています。Vector, Matrix, Quaternionの各種計算や、それぞれへの相互変換など。鏡面反転や、アフィン変換以外の変換等含めて、幅広い内容が載っています。
ゲームアプリの数学
かなり基礎的な内容から平易な文章で読みやすいことと、スプラインや補間に関して取り上げているのがポイントです。意外とスプラインや補間の解説ってないんです。ゲーム3D数学と合わせて手元に置いておいて損はない本。Unityも取り上げているのでUnity好きな方はなおよしです。
ゲームを動かす数学・物理R
最近見て意外と良いなと思った本。3D数学等の内容は深くはないですが、コリジョン(衝突)と乱数といった、あまり他の数学本にのってないトピックがのっています。コリジョン周りは、後述の本が最強ではありますが、そこまで必要ないと思うなら、この本にのっている程度の知識は身につける、またはリファレンスできるように置いておくと良いと思います。
ゲームを動かす数学・物理Rについては、以下で簡易レビューも紹介しています。
ゲームプログラミングのためのリアルタイム衝突判定
最近だとコリジョン判定も物理エンジンに頼るのが普通になってきてますが、ベース知識としてどういった計算で判定をしているかを知っていると良いです。
オーバーラップ判定や交差ポイントを取る方法とその計算コストは、シェイプによって大きく変わることがわかります。物理エンジンを使っているとしても、どういったシェイプを取り扱ってあげれば軽くなるのかイメージが付きやすくなると思います。また、場合によっては自前でコリジョン判定実装することもあります。よりルールを単純化(xz回転はしない条件にするなど)して、自前で判定してあげたほうが処理が単純かつ負荷軽減することが可能です。
10年以上前の本ですが、書いて有ることはコリジョンの原理の部分なので、いつまでも通用する知識です。お高いのが難点。
C++の理解を深める
やはりゲーム開発は性能を追い求めるため今後もしばらくC++ベースです。C++の知識は可能な限り幅広く身につけておいて損はないです。 EffectiveC++は必須ですね。
ロベールのC++入門講座
C++の言語機能は、一通り何かしらで触れておいた方が良いのですが、入門本だと浅い知識になりますし、かといって言語仕様書のような本は学習目的には向いていません。その点こちらの「ロベールのC++入門講座」は、入門と謳ってはいますが、かなり幅広い内容に触れながら、学習形式に向いたチャプター区切りの構成であり、著者の平易な語り調で学習しやすいです。テンプレート、関数ポインタ、メモリ配置、といったことまで最終的に通しで学べるのは貴重です。
「初心者を中級者まで育てる本」というのが最も相応しい謳い文句かなと思っています。10年前の本ですが、いまだに売れ続けている理由が上述したバランスの本がいまだにこれしかないような気がするからかなと思っています。
ただし、C++11/14の内容は一切含まれていないので注意です。モダンなC++のコーディング方法を効率的に学びたいなら、最新書籍を随時調べたほうが良いでしょう。この点を差し引いても、初心者が中級者へステップアップするのには、いまだオススメの本だと思います。約1000ページありますが、思ったよりはスピーディに読み進められると思います。
プログラミング言語C++ 第4版
C++の生みの親ビャーネ・ストラウストラップによる、C++11までのすべてがつまった本。細かな仕様まで、C++について知りたことがあればこの本で知ることができます。STLの内容も含まれています。
濃い内容と大ボリューム(1360ページ)の本なので、C++の初学として一から最後まで読むのはなかなか難しいです。リファレンス的な使い方や、ある程度C++に慣れた人が足りない知識の部分を補間するために読む、といった読み方がおすすめです。ただ、内容はただの「言語仕様の列挙」ではなく、案外読みやすい解説文章となっているので、時間と根気があれば読み物としてC++のすべてを一から最後まで追っても良いでしょう。
C++で開発するなら手元に1冊あると心強い本です。
Effective C++
C++の言語機能を一通り学んだら読む本。必読といってもいいです。この本に載っている内容は、現場でほぼ常識として知っておくべきことといっていいほど、重要なことが書かれています。
constや参照の使い所や、virutal宣言をすべきでないとき、new,deleteのカスタマイズなど、言語仕様を学んだのはいいけど使い所は?、といった疑問を解消してくれるエッセンスが詰まっています。また、C++をただ学習しただけでは頭に入っていないような気をつけるべきこと(メモリのアラインメントやスタック変数の寿命、コンパイル依存性によるビルド時間肥大化など)が明示的に解説されており、どういったことを考慮してC++を使うべきか意識が高まります。
C++で物作りをするならば、必読の一冊です。
More Effective C++
Effective C++で語りきれていないC++のプログラミングエッセンスの解説。Effective C++の方がやはり基本かつ重要なことが多く、こちらのMoreの方では、なかなか細かい部分になってきています。リソース管理(メモリ、参照カウントなど)やデザインパターン的な内容の比重が大きい印象です。
できるなら読んでおきたいが、即効性のあるような効果は期待できない。Effective C++を一通り把握した上で余裕があるなら読んでおきたい本です。
Effective Modern C++
ModernはC++11/14のこと。基本的にC++11/14に関する内容のみで、C++11/14を解説しているのではなく、C++11/14の機能を使う場合にどういったことに気をつけて、どう活用していくべきかが書かれています。これまでのEffectiveと同様、C++11/14の機能をある程度把握して使いはじめてから読んでこそ、内容が頭に入ってくると思います。
C++11/14をがっつり使い始めたら読んでおきたい本です。
Effective STL
STLの扱いで注意すべき点が載っています。STLには意外と知らない機能や、認識できていない落とし穴があります。読むとSTLを安全かつ効率的に扱えるようになります。ただし古いのでC++11より前の内容です。C++11以降で入った機能で改善されるものも多いかもしれません。すでに絶版となっています。
コーディングのお作法を学ぶ
言語を学べば、何か作ることは可能にはなるのですが、プロとして通用するコードとはどんなものか知る必要があります。そのためのお作法を学べるのが以下に挙げる本です。
Code Complete 上
設計の重要性、設計と実装をすすめるバランスや考え方、オブジェクト指向設計において重要なこと、コーディング自体で気にかけるべきこと、コーディングのお作法、それらを網羅的に学ぶことが出来ます。現場で使えるコードというのは、ただ動けばよいのではなく、保守性、拡張性、再利用性などの高いコードを指します。そういったコードにするにはどうするのかという、考え方や実例を学ぶことが可能です。
(特にオブジェクト指向)プログラミングにおいて、言語仕様よりも重要な根本的で普遍的な内容であり、必読の本といえます。ただし、文章や言い回しがわかりにくい部分もあるため、若干読みにくいと感じる人もいるかもしれません。
リーダブルコード
コーディングお作法部分を平易に語った本。命名方法やコードブロックの粒度などオブジェクト指向設計に限定しない普遍的な、読みやすいコードにするとはどうゆうことかが書かれています。Code Completeを読んでいるならあまり目新しい発見はないですが、Code Completeとくらべて、内容量も少なく、文章も読みやすいので、若手や万人が読みやすいのはこちらの本だといえます。
Dustin Boswell, Trevor Foucher (オライリージャパン)
発売日 2012/06/23
リファクタリング 既存のコードを安全に改善する
すみません、紹介しておいてこの本は自分は読めてないのですが、コード設計レベルやお作法を学ぶには、リファクタリング本が役立つと思われます。昔からある名著の部類に入るもので、2014年に新装されたので、読むには良い機会だと思います。(そのうち読む)
ツールやスクリプト環境を作れるようになる
ゲーム作りではイテレーションを早く回すためデータ駆動となるよう、環境を作っていく必要あります。そのためには、ツールやスクリプト環境を導入していくこととなります。
大規模開発だとツール担当者が決まっていたりしますが、それにとらわれずツール等を自作できると自身や周囲を含めた作業効率が大幅に改善されることもあります。主要言語(C++)と別に、軽量系言語も何かは使えるようにしておきましょう。
〔速攻入門〕 C#プログラミング すぐに現場で使える知識
Windowsのツールを作るならやはり王道はC#でしょう。C++やJavaとの違いをベースに解説しているので、どちらかを習得していると、差が明確になってよいです。比較的短くまとまっているので読みやすいです。C++知識がベースにあれば、C#はこの本とネットで事足ります。
Python系
軽量スクリプト言語なら今はPythonが人気です。特に流行りのAI・ディープラーニング関係のライブラリが豊富ですので、将来性としてもオススメです。ネット学習でもいいと思いますが、最新の学習書だと以下の本あたりがおすすめです。
Ruby系
軽量言語でもう1つ日本でメジャーなのがRubyです。Ruby自体は、非常に書きやすいオブジェクト指向言語で非常に学習しやすいです。ただ、主な活用用途がWeb開発(Rails前提)な側面があり、将来性としてもやはりPythonが良いと思います。Rubyで人気参考書は以下です。
組み込みスクリプト(Lua)
ツールだけじゃなく、組み込みスクリプトを使えるようにして、ゲームロジックをプログラム可能としながらイテレーションを早くすることも重要です。組み込みスクリプトだとLuaが最もメジャーかと思います。下記の本に、LuaとC++の連携からわかりやすく書いてあり、導入は難しくありませんのでスクリプトを試してみたい場合良いと思います。
ゲーム開発テクニックの具体的レシピを知る
ゲームのコード実装は、様々なアイディアの集合体です。コンシューマハードの制約下(省メモリ、低処理負荷、高フレームレート)で、いかにかっこよく、多くのことを実現するか、そのために多くのアイディアが世に出されてきました。そういったゲーム特化した技術アイディア集として以下のようなものがあります。
Game Programming Gemsシリーズ
ゲーム開発テクニックレシピといえばGemsシリーズです。刊行は止まり少し古くなりましたが、最近でも十分役立つようなアイディアやヒントになることは意外と散らばっています。日本語版がお高いのが難点です。さすがに古い内容なので、フルプライスでシリーズをそろえて読むほどではないですが、開発現場などにはよく置いてあると思うので眺めてみると良いと思います。
Game Engine Gems シリーズ
最近のゲーム開発のGemsはこちらの印象です。ゲームエンジンレベルで使えるベースのグラフィクスやキャラ制御、AIなどの実装テクニックが最近のトピック含めて載っています。英語版しかないのが難点です。
低レベルなレイヤーを理解する
C++は高級言語ですが、低レベルなレイヤー(メモリ等を直接)を扱える言語です。C++を上辺だけの、オブジェクト指向やテンプレートが使える言語として扱うのはC++を使いこなしているとはいえません。時には、メモリのアラインメントを意識し、時には各データtがどうゆうビット列で構成されているか意識し、時にはメモリ以上に高速なキャッシュアクセスを意識する。そういったことができてこそ、C++本領発揮といえます。その辺を理解するのに必要な本です。
プログラムはなぜ動くのか
まさしく、低レベルレイヤーを理解するための本です。CPU、メモリ、記憶装置の基本構成からレジスタ、アセンブラの動きまでかなり読みやすく書かれています。低レベルな部分はより難しい印象ももたれがちですが、かなり読みやすい本です。古い本ですが、プログラムを組んでCPUを使う限り普遍的な内容です。今でも間違いなく読むべき一冊、低レベルを意識するなら必読の一冊です。
コンピュータはなぜ動くのか
上記「プログラムはなぜ動くのか」をよりコンピュータアーキテクチャよりにした内容です。こちらも普遍的な内容なので古いですが、読んでおくとよい本です。
プロセッサを支える技術
プロセッサ(CPUl)がどう構成され、どう計算しているか、そこにどういった技術が詰め込まれているかがわかります。キャッシュや仮想メモリなどの、データアクセスへの高速化への手がかりも記載されています。下記のパタヘネ本よりは読みやすいので、プロセッサの動きを理解するのに読んでいるといい本だと思います。
パターソン&ヘネシー コンピュータの構成と設計 上・下
コンピュータアーキテクチャをかなり低レベルな部分から網羅的に扱った本です。コンピュータアーキテクチャの教科書の定番のような本。プロセッサで使える命令セットのレベルから、プロセッサの構成などまで、組み込み系でもいけるレベルの知識が詰まっています。文章的に読みやすくはない上に、内容が低レベルの詳細に特化しすぎているので、余裕があればでいいと思います。
今気になっている本
今回紹介できてないですが、最近気になっている本こちらです。そのうち読めれば、上記の紹介側へ記載したいところです。
Optimized C++ ―最適化、高速化のためのプログラミングテクニック
C++最適化は奥深くも面白い領域です。知っていおいて損はないでしょう。
プリンシプル オブ プログラミング3年目までに身につけたい一生役立つ101の原理原則
ソフトウェア開発における「原則」はたしかにあります。原則は守りたいが守れてないのが実際です。原則は改めて学びたいところ。
ベスト5に厳選!
最初の想定より多くなってしまいました。入門者にこんなにぶつけて心を折りたいわけじゃないんです。良かった本紹介したら結果こうなった・・。
ということで、特にこれからゲームプログラマを目指し始める人を想定して、中でもおすすめの5冊を厳選しました。
- ゲームプログラマになる前に覚えておきたい技術
- ゲームエンジンアーキテクチャ 第3版
- プログラムはなぜ動くのか
- Effective C++
- Code Complete 第2版 上 完全なプログラミングを目指して
以上!
この5冊を7割以上理解していれば、ゲームプログラマとして現場でも問題なく働けると断言しましょう!(保証なし!!!!僕のおすすめであることだけ保証します。)
上記5冊でゲーム開発にこなれてきたら、次点で
あたりが、ゲームプログラミングの幅を広げたり知識を深掘りするのにおすすめです。
まとめ
いかがだったでしょうか。入門者が見たら多すぎ乙・・。って感じが大半の感想でしょうか。 もちろんはじめからこれらの知識すべてがあるべきというわけではありません。日々勉強して足りない知識・必要な知識を徐々に補完していければいいと思います。
また、「エンジンに頼らない」という謳い文句の本記事ですが、エンジンを利用した開発でももちろん身につけておいたほうがよい知識ですし、エンジンカスタマイズするなら同様に必須の知識となるでしょう。
それから今回は、ゲームプログラムのベース知識向けのもので、今回触れてない分野として、グラフィクス、ネットワーク、AI、プログラマ精神論、エディタなどの環境周り論、などの大きなジャンルもあります。僕は特にこれらのエキスパートというわけではないのであまり語るに値しないと思っていますが、機会があれば取り上げてみたいですね。
以下では、ゲーム会社についても紹介しているので、実際にゲームプログラマになる際には参考にしてみてください。
いじょうでっす。
コメント
[…] エンジンに頼らないゲームプログラマになるためのおすすめ本まとめ ニュース解説 – […]
初めまして。現在、ゲームプログラマへの転職を目指してc++の勉強をしているプログラミング初心者です。
ようやく勉強する言語を決めたところなのですが、まずゲームを作るという作業をしてみた方がいいのではないかという思いもあるので質問させてください。
コンシューマーゲームではc++の知識やエンジンに頼らない技術が必要だというのは、様々なところで見聞きしました。
それ以外のゲーム制作の現場では、unityなどを使っている場合が多いのかと想像しますが、unityやUEを使って制作する場合でもc++やエンジンに頼らない知識や技術は役立つのでしょうか。
そのメリットと、もしあればデメリットをお教え頂ければ幸いです。
また、プログラミング初心者がゲームプログラマを目指すにあたって、言語の勉強をある程度してからゲームを作ってみるのか。
はたまた、やはり出来るだけ早い段階でゲームを作る経験をしておいた方がいいのか。
お考えがありましたらお聞かせ願います。
急な質問で不躾ではありますが、どうぞ宜しくお願い致します。
>pj様
返信遅くなりましたが、回答させていただきます。
>unityやUEを使って制作する場合でもc++やエンジンに頼らない知識や技術は役立つのでしょうか。そのメリットと、もしあればデメリットをお教え頂ければ幸いです。
エンジンの利用スタイル等に依存はしますが、基本的には役立ちます。
ざっと役立つ点・メリットは以下が挙げられます。
・エンジンの独自カスタマイズや、修正ができる
・各機能について重い処理、メモリを使う処理、といった勘所が付く
・C++理解していればエンジン向けスクリプトも同様に書ける
・既存エンジン依存に縛られないスキルが身につく
特に最初と最後が大きいですね。結局は、エンジンを使うにしても、エンジンの中に縛られるかどうかに大きな差を生み出すのが上記知識です。
今後永久にUnityやUEが主流エンジンである必然性は特にありませんし、バージョンアップで使い方が変わったりもしますね。そのときに、そのエンジン独自の使い方的な知識は、場合によっては無価値になる可能性もあります。
「c++やエンジンに頼らない知識や技術」はそうではなく、ベースとなる半永久的に有用な知識が多いのが大きいメリットです。
逆にデメリットは以下ですね。
・学習コストが高い
・とりあえずゲームを作ってみるまでが遠い(特に3D)
上記の通りのメリットがあるので、可能なら学んだほうがいい知識に決まってるんですが、そうはいかないのがコストの問題です。
そういったコストをエンジンがカバーしてくれているおかげで、ざっくりとしたゲームが簡単に作れるので当然といえば当然ですね。
ですので、考え方と参加するプロジェクト(お仕事)次第で、バランスを考えて取り組むべき知識だと考えています。
>また、プログラミング初心者がゲームプログラマを目指すにあたって、言語の勉強をある程度してからゲームを作ってみるのか。
>はたまた、やはり出来るだけ早い段階でゲームを作る経験をしておいた方がいいのか。
これに関しては、ボクは圧倒的に「出来るだけ早い段階でゲームを作る」べきだと思います。
もちろんある程度は言語が使える(ifもforも知らないとかはない)ようにはなるべきですが、第一歩で「言語の仕様・機能一通りなめました」までやる必要はないでしょう。
ゲーム開発でよく使う機能、使わない機能がありますし、何より、本来の目的のゲームがアウトプットされない勉強にはモチベーションが保ちづらいと思います。
ゲーム開発を進める中で、「これもうちょっとスマートにかけないかな?」「参考書のこの書き方知らないぞ?」なんてなったら改めて言語仕様を調べればよいと思います。
お仕事としてゲーム開発を行い、中堅やリーダーになるというなら、できるだけ幅広い知識があるべきではありますが、最初の段階で外堀を埋めるようなことは必要ないです、ゲームを作りましょう。
返信遅くなり申し訳ないですが、参考になれば幸いです。また何かあればお気軽にどうぞ^^。
お返事頂きありがとうございます!
エンジンに頼らない技術が如何に役立つか明快にお教え頂き感謝しております。
全くのプログラミング初心者ですので、簡単なゲームを作るにもまだまだ時間がかかりそうではありますが、兎にも角にもDirectXなりを使って挑戦してみようと思います。
出来ないことがあれば出来るようになればいいだけですもんね。
右も左も分からず闇雲にC++の参考書を読みながら勉強していただけでしたので、大変参考になりました。
ありがとうございます!
初めまして。とあるゲームクリエイター科の専門学校に通っている者です。
現在、C++でゲームプログラミングをしているのですが、今参考書の購入に悩んでいて質問させください。
自分は現在1年生でC++を使用しゲームを制作しているのですが、どうしてもC++の知識不足により初歩的なエラー(例:全く関係ないコードを書いてエラーなど)ばかり起こしてしまい、全くゲーム制作が捗らない現状です。
学校で配布されたC言語の参考書を読んでいても、書いてある内容がゲームプログラミングにどこに生かされるのかわからなく、しまいに今作っているゲームのソースコードは大半、先生が授業で使用したコードを使ってしまいます。
そこで自分はC++のゲーム制作専門の参考書を探すことにし、このサイトにたどり着きました。
自分は主様が最初におススメしていました「ゲームプログラマになる前に覚えておきたい技術」を購入しようと思っているのですが、自分でプログラミングできないものとしてこの書籍はあっているのでしょうか?
そしてC++、C言語全般においての知識不足が大きな原因だと思うのですが、やはり知識を補う参考書を購入したほうがいいのでしょうか?お聞きしたいです。
とてもわがままな質問なのは重々承知なのですが、返信いただければ幸いです。
よろしくお願いいたします。
> TT様
はじめまして、コメントありがとうございます、回答させていただきます。
まず大きく以下の2つの悩みが混在しているように感じました。
・C++の知識不足でエラーが解決できない・解決に時間がかかる
・そのためのC++の勉強がゲーム開発にどう生きるかわからず、学習も捗らない
1つめの「C++の知識不足でのエラー解決」に関して、
こればっかりは勉強して1つ1つ理解していく他ありません。
最初のうちビルド・実行がスムーズにいかないのは、誰しも通る道です。
1つ1つ理解していけば、エラーは最終的には必ずなくなりますし、
次の機会ではどんどん解決への時間が短くなっていきます。
2つめの「ゲーム開発へどう生きるかわからず学習が捗らない」については、
その時点でゲーム開発に必要としていない構文・知識等なら、あまりコストをかけずに流す程度で良いかと思います。
実際にゲーム開発中に使うとなったときに、詳しく理解できれば良いかと思います。
1つ目の回答と矛盾するような感もあるかもしれませんが、
1つ目のエラーの解決は、ゲーム実行のために解決必須のエラー(という想定)なので「ゲーム開発に必要なC++の知識」です。
なのでしっかりモチベーションを持って理解・勉強します。
2つ目でいいたいのは、C++構文全体を、網羅的に理解する、までは必要ないということです。
おっしゃるとおり、実際ゲーム開発に活きない構文等もあります(例外処理は一般的にゲームでは使わないなど)。
これを踏まえて、質問の本題
> 自分は主様が最初におススメしていました「ゲームプログラマになる前に覚えておきたい技術」を購入しようと思っているのですが、自分でプログラミングできないものとしてこの書籍はあっているのでしょうか?
> そしてC++、C言語全般においての知識不足が大きな原因だと思うのですが、やはり知識を補う参考書を購入したほうがいいのでしょうか?お聞きしたいです。
についてですが、
まず「ゲームプログラマになる前に覚えておきたい技術」は、
本記事でも紹介している通り、ゲームが動く原理を根本から理解する、といった内容の本です。
気になさっている「ゲームで必要なC++の知識」を、効率よく学べるといったことではないです。
ですが、上述のとおりまず必要なのは
・なんにせよ、C++でゲーム開発を進めてみる
・エラーは内容・対処法を可能な限り理解しようとしてみる
・それでも大きく時間が取られるなら、別のコードにするなど、回避策で対処する
ということを進めていくことかなと思います。
そのために必要になるのは、「C++でゲーム開発をすすめられる本」です。
その点で「ゲームプログラマになる前に覚えておきたい技術」はC++の実サンプル付きで進められて良いと思います。
ただ古い本なので、構文やサンプル環境の古さがどうしてもあります。
最近では「ゲームプログラミング C++」https://amzn.to/2NMFaUs
もサンプル付きでゲーム作りも進められる、新しめの本でおすすめです。
(この本も本記事に追記しようと思っている本ですが、コストとれておらず・・)
個人的には、ゲームの動く原理根本からの理解は今なお「ゲームプログラマになる前に覚えておきたい技術」の方が上です。
また、こちらは和書で、著者の平山さんの歯に衣着せぬ文章もおすすめです。
ただ、上述の通り、古さもあって導入のしやすさ等から、いま「C++でゲーム開発をすすめてみる」なら
「ゲームプログラミング C++」のほうがよいかな、という印象です。(元は洋書でぼくは原著で読んでました)
「C++の知識を補う本」に関しては、自分が読みやすいものが手元にあって、困ったときや言語に興味が湧いたとき参照できればよいかと思います。
上述の通り、C++全体の理解を優先する必要はないと思っています。
目的の答えとなっているか、少し不安ではありますが、参考になれば幸いです。
返信いただきありがとうございます。
自分の悩んでいた部分や質問などに一つ一つ丁寧に回答してくださって、自分がこれから何をするべきなのかがはっきりと明白になったのはとても感謝しています。
まずは仰っていたようにC++を完璧に理解しようとはせず、今はゲーム制作1本で頑張っていこうと思います。
なのでオススメしてくださった「ゲームプログラミング C++」を購入して自分の力で制作していきます。
そしてある程度自分の力でプログラミングができるようになりましたら、サイトで紹介していた本の中に学校の先生もオススメしていた本がちらほらございましたので、購入してみようと思います。
とても参考になりました。本当にありがとうございました。
はじめまして。現在独学でC++を学んで、ゲームプログラマーを目指しています。
ちょうど入門書を読み終えて、そこでこの記事を読んで「ゲームプログラマになる前に覚えておきたい技術」を購入しようとしたのですが…。
「ゲームプログラマになる前に覚えておきたい技術」はかなり古い本だと聞きました。
なので、他の方のレビューを見ると、他の本を読んだ方が良いと書かれていたのですが、最近の本の中で「ゲームプログラマになる前に覚えておきたい技術」の代わりになる本はあるのでしょうか?
代わりになる本があったら、教えていただけると嬉しいです。
> aasd様
コメントありがとうございます、回答させていただきます。
> 最近の本の中で「ゲームプログラマになる前に覚えておきたい技術」の代わりになる本はあるのでしょうか?
最近のものということを重視して選ぶなら、↓ですね。
「ゲームプログラミング C++」https://amzn.to/2NMFaUs
(近いうちに記事に追記したいと思います)
ただし、代わりにはなりえていません。こちらの本は「ゲーム開発全般で使う知識を網羅的に浅く学習できる」というイメージが一番よいかと思います。
一つ上で頂いたコメントでも返信しているのですが、
「ゲームの動く根本原理の理解」には「ゲームプログラマになる前に覚えておきたい技術」が今なおベストです。
この本は、たしかに今や10年以上前の本であるため、サンプルコードは古く、VCプロジェクトの変換や、グラフィックAPI周りの変更が必要となるでしょう。
ただ、中でかかれている、懇切丁寧な根本から数学まで踏まえた解説は他のどの本にもありません。
そしてその「動く原理」は普遍的な内容で、いつまでも使える根本知識です。
ただ、サンプルが古いこと、根本からすぎてボリュームが半端ないこと、からかなり学習コストが高いことも間違いないです。
ということで、ちょっと長くなったのでまとめますと、どんな知識を求めて本を探しているか次第で選ぶ本が変わります。
目的はざっと
・ゲーム全般の知識を広く早く得る
→ 「ゲームプログラミングC++」
・サンプルコードをスムーズに動かせて、動かしながらのゲーム開発学習
→ 「ゲームプログラミングC++」
・ゲームの動く根本原理を根気よく理解する
→ 「ゲームプログラマになる前に覚えておきたい技術」
といった感じかなと思います。参考になれば幸いです。
返信ありがとうございます。
「ゲームプログラマになる前に覚えておきたい技術」を読んで根本原理を理解してから、「ゲームプログラミングC++」を読んで応用していきたいと思います。
10年以上経った今でも人気なだけあって、「ゲームプログラマになる前に覚えておきたい技術」の代わりになるような本はないんですね。
わかりやすく教えてくださり、ありがとうございました!
ゲームエンジン・アーキテクチャの説明部分,「コンポジション指向」ではなく「コンポーネント指向」ではないですか?
間違っていたらすみません.
コメントありがとうございます、ご指摘部分は間違いではないです。
コンポジション(所有)は、継承によるクラス構成と対となるような設計概念です。
クラスを拡張していく際に、継承により基底クラス構成がすべて引き継がれること等の問題を、必要なもののみを所有させることでサイズも小さく柔軟なクラス構成を可能とします。
コンポーネントは、コンポジションの概念の一部といえて、GameObjectに持たせる「部品」という意味でそろえた、所有させる機能群の汎用的な名前といえると思います。
ゲームエンジンアーキテクチャにも「コンポジション」の記載もあります(索引も可能)ので、詳細はそちらをご覧になってみてください。