雑記:ゲームプログラマーになるには

昨日の夜、http://smallwalk.sakura.ne.jp/jcheck.htmlを適当に見てたらゲームプログラマーを目指すひとというそのまんまなタイトルのブログを見つけてしまい、「WindowsAPIを使う」とか昔の自分を見てるみたいで色々と考えてしまい、再びまとめを作りたくなる。ということで、だいぶ前にもなんか似たようなことを書いた気はするものの、再び書いてみる。

ぶっちゃけこれだけで十分


ぶっちゃけ、だだもれの人の本を読む&作るだけで十分なんじゃなかろうかとは思う。


ゲームプログラマになる前に覚えておきたい技術

ゲームプログラマになる前に覚えておきたい技術


つってもまだ読んだことはないんだけど。目次を見る限り、一通り知ってれば新人としては十分っぽい。自分でも一部知らない部分がありそうなので、「全部知ってなきゃいけない」というわけでもなく、全部知ってたら安心、くらい。


で、これだけだと「まとめたい」という欲求が充足されないので、以下は延々と蛇足。

優先順位


「この優先順位でやっとけば良かったなー」というのを列挙&以下で解説。

    • ゲームを作ったことがある
    • ライブラリを使ったことがある
    • 下位レイヤの挙動を「知っている」
    • デザインツールを使ったことがある
    • バージョン管理ソフトを使ったことがある
    • 他人のコードを読んだことがある
    • Visual Studioなどを使ったことがある
    • なんでも良いからバイトをしたことがある
    • 下位レイヤの挙動を「扱える」
    • 綺麗なコードを書ける
    • オリジナルの素材・ゲームを作る

高:「ゲームを作ったことがある」


「ゲームを作ったことがある」というのは、要は「ゲームにどんな要素が必要で、どれくらいしんどいか知ってる」ということ。意外と単純なようで、しかし実際にやってみると面倒くさいということがよくわかる。今列挙できるだけでも以下の要素がある。

  • 描画(2D, 3D)
  • 入力
  • セーブ&ロード
  • メニュー
  • シーケンス
  • 音(BGM, SE)
  • パーティクルなどの部分エフェクト
  • フェードなどの全体エフェクト

メニューとかシーケンスとか、甘く見てたけどすげーしんどい。テトリスのような「既存のもの」&「コンテンツが簡単なもの」であっても、トップ画面やオプション画面などを用意して、ハイスコアをセーブ&ロードとかやるだけで十分しんどい。


そういうわけで、まずはできるだけ簡単なゲームを一通り作ってみるのが重要。

高:「ライブラリを使ったことがある」


最近では、クリスタルツールズ(スクエニ)MTフレームワーク(カプコン)などのように、汎用ライブラリが整備されつつある。そういうライブラリはパフォーマンスにも大きく影響を与えるため、経験の浅い人間が関わることはほとんどないと言っていい。逆に言えば、経験が浅い人間は、こういったライブラリを使うことを前提とする。そのため、「WindowsAPIなどの下位レイヤーを知っている&使ったことがある」よりは「OpenGLなどのライブラリを知っている&使ったことがある」新人の方が有用。下位レイヤーを「知っている」のはそれはそれでライブラリの利用の仕方にも影響するのでないよりはあった方が良いけど、「扱える」必要は特にない。"中:「下位レイヤの挙動を「知っている」」"や"低:「下位レイヤの挙動を「扱える」」"はそういう理由。


ちなみに、大手以外のゲーム会社でもそういう環境かどうかは不明。

中:「デザインツールを使ったことがある」


これも「使ったこと」があれば良く、「駆使する」必要はそこまでない。デザイナ(アーティスト)との連携が取れることが重要なだけで、デザイナの仕事が出来ることは重要ではない。モデリングツールなどで「どういう調整は簡単で、どういう調整は難しいか」とか「マテリアルとはなんぞや」とかがわかる段階まで行ければおそらく十分。(と言っても、肝心の自分がまだモデリングツールを使えてないのだけど)


また、同様の理由で「オリジナル」ゲームである必要もそんなに強くはない。上の例の「デザイナ」を「プランナ(企画)」に置き換えればよく、企画との連携がとれることが重要なのであり、「すげーオリジナルな作品」などを作るような企画力はそんなに求められない。

中:「バージョン管理ソフトを使ったことがある」


他のプログラマーとコードを共有するために、SVNなどのバージョン管理ソフトを使うことは多いはず。なので、最低でも「Update(取得)」と「Add(追加:Commitしないと反映されない)」「Delete(削除:Commitしないと反映されない)」「Commit(転送)」は使えるようにしておきたい。
一人だと機会はないけど、研究室などで複数人で作業できる場合は、「Edit Conflict(衝突の解消)」などができると嬉しい。

中:「他人のコードを読んだことがある」


優先度はやや低いかもしれないけど、他のプログラマーと作業をするので、「他の人のコードに自分のコードを組み込む」「他の人の作ったギミックをもとに、新しいギミックを作る」などの作業が発生するため、コードを読むのに多少慣れておいたほうが良い。


また、同じアルゴリズムであってもインデントやスコープなどの扱いでコードが違うため、そこらへんを見て回って、吸収できそうなものは吸収していったほうが良い。

中:「Visual Studioなどを使ったことがある」


たいていの場合、Visual Studio相当の環境はあるんじゃないかと思う。知らんけど。で、「デバッガ」くらいは使えた方が良いかなと思う。ハングした時の「コールスタック:どの関数がどういう順序で呼ばれてどこで止まったか」「変数:止まった時の値はどうなっているか」くらいはわかった方が良いかと。


しかし、いまだに自分もちゃんと使えてるとは言いがたいので、自分の中ではもう少し優先順位が低い。

中:「なんでも良いからバイトをしたことがある」


社交性の有無の判定として「バイトの経験の有無」が使われることがある。なので、なんでもいいから「バイト」をしているとその分は有利。しかし、仕事で必要な程度の社交性があれば良い&プログラマ=内向的というのはわりと一般的なので、実際には「中〜低」くらいの優先度。なんにせよ、仕事のためには「連携」が必要なので、面接のためだけでなく、話す練習としてもやっとくのは悪くない。

低:「綺麗なコードを書ける」


どうしても最初は「下位レイヤを扱える」「コードが綺麗」ということに重点を置きすぎるけど、それらは「必要」でも「重要」でもなく、「あると嬉しい」レベルのもの。「必要」なのは「ゲームを作れること」であり、「重要」なのは「連携が出来ること」であり、その連携のサポートとして「デザイナや企画の仕事を知っている」「バージョン管理ソフトが使える」などの要素が関わり、その要素の一つとして「コードが綺麗(他人が理解しやすく修正しやすい)」があるだけに過ぎない。軽視すべきものというわけではないが、他より重要視するほどのものでもない。なので、実際の優先度は「中〜低」くらい。間違っても「高」ではない。

低:「オリジナルの素材・ゲームを作る」


上の方でも少し触れたが、実際の仕事では「素材」と「企画」は他の人が作るわけで、そこで上手くやり取りできると「喜ばしい」が、それより重要なのは「組み立てる」という本業の方だ。なので、提出するサンプルはオリジナルである必要はそんなにない。それよりも、フリー素材や既存の企画をもとに本業に慣れていることが重要。

その他


長くなったな。メインアカウントでやるべきだったのかもしれない。しかし、あんまりこういう主義主張はしたくないので、新陳代謝扱いで。


以前書いたやつよりはだいぶまとまりが良い気がするけど、実際に見比べてはいないのでわからない。というか、本当に以前に書いたんだっけか。


だだもれの人の本の目次とか見たけど、やっぱり買って一通りは目を通しておくべきかなーと思った。大学上がりだとどうしても独学になってしまうからなぁ。