SionGames 技術Blog

C#やUnityを触っているサーバープログラマーが色々と書いていく所

ゲームプログラマーになる為には? 業界入りした筆者の実体験

何を行えばゲームプログラマになれるのか分からない。
ゲーム業界に転職したい人や学生さん向けに、今ゲーム業界で働いている筆者が学生の頃に何をしていたのか。
勉強内容や就活対策で行ったことなど含めて、学生時代の実体験を記してみたいと思います。

ゲーム業界で働きたいと思った


小学生の頃は家庭用ゲーム機でよく遊び、中学生の頃からはオンラインゲームを中心にかなり遊んでいました。
高校2年に入ってそろそろ進路を決める時期になり、『ゲーム作って働けたら楽しいのかな?』と少しずつ思い始めまして、
高校3年にはゲームを作る事を仕事にしようと方針を決めました。

この時ゲームを作る事を仕事にしたいけれど、実際に何をしたら良いのか右も左も分からない状態でした。
独学などとても出来ないと思っていました。

なので大学か専門学校に入って勉強する選択を取りました。
ただ、ゲームに特化した大学が身近に無かった事や、
業界に入る一番近い方法が専門学校かな…?と調べているうちに感じたので、ゲーム専門学校で就職に強そうな所を探して入学する事にしました。
4年制課程の学科に入りました。2013年の出来事です。

専門学校で何を勉強したか


まず大雑把に専門学校で勉強した内容を書きます。
1年生ではC言語の基礎文法と基本情報技術者試験対策。
2年生ではC++言語の基礎文法とDirectX,Wiiを使った2Dゲーム個人制作、チーム制作。応用情報技術者試験対策。
3年生ではDirectXを使った3Dゲーム制作。就職作品作り。
4年生では企業連携でUnityを使ったゲーム制作やSocket通信、Linux基礎操作、社会人のマナー。

1年生ではC言語とコンソールアプリケーション

プログラムを全く知らない状態から1年間で勉強できた項目を列挙すると

  • printf(), scanf()といった入出力。"%d"の使い方等
  • char, short, int, long型などの基本データ型
  • if文、switch文、for文、while文といった基本文法
  • +, -, *, / などの四則演算。%で割り算の余り
  • 関数の作り方
  • 定数(#define, const)
  • グローバル変数
  • 配列、2次元配列
  • 構造体
  • ポインタ
  • fopen, fclose等のファイル操作

のように並べると色々あります。

他にも四角形の当たり判定の実装方法や弾の飛ばし方などゲーム特有の処理の実装処理を勉強しました。
自分は1年間勉強した結果、コンソールアプリケーションで横スクロールアクションゲームが作れるくらいになりました。
ゲームを作っているうちにノリに乗っていく感覚や自分の目指すゲームに近づいていく感覚がとても楽しく、ゲーム作りは自分に合っていると感じました。
学内コンテストで銀賞を頂き高く評価してもらえた事もあったと思います。

ちなみに学校からはカーソルの位置を変更する処理や背景色・文字色の変更処理、BGM・SEを鳴らす処理の入ったライブラリが提供されていましたが、
カーソル位置と背景文字色を変更するぐらいは意外と簡単に作る事が出来ます。

2,3年生ではC++とDirectX9

C言語を勉強 & ゲームを作って実践を1年繰り返した後に、C++のクラスを使って継承などの勉強に入りました。
再度勉強内容を列挙してみます。

  • 複数cppファイルの使い方
  • 動的メモリー確保 (malloc, new, スマートポインタ)
  • 関数ポインター
  • リスト構造
  • classを使ったオブジェクト指向設計
  • classの派生と継承。protectedの使い方。ポリモーフィズム
  • コピーコンストラクタ
  • namespace
  • 演算子のオーバーロード

徐々に言語機能だけでなくプログラミングでよく使用される基本的なアルゴリズムや設計に関する勉強も入ってきました

そして2年生になってDirectXの授業が入り始めました。
ゲームらしい画面になり始めてかなりテンションが上がったのを覚えています。
最初はDirectX9の固定パイプラインに頂点情報を流して3角形や4角形を表示するところから始まりました。
そこから徐々にテクスチャを貼って画像付きの4角形を出すようにしたり、α情報を入れて透明度を調整出来るようにしたり、加算合成、減算合成を使ってエフェクトを出せるようになったりと、勉強が進むたびに表現の幅も広がっていきました。
ただし、2019年現在ではDirectX9は流石に古いので、DirectX11や12等を主体に勉強した方が良いかもしれません。

2年生後半には3Dのゲームを作れるようz軸を扱うようになりました。
向きを決めるために行列計算なども勉強しました。
メタセコイアやブレンダーを使って3Dモデルを軽く制作する事もしました。
3年生の頃には影を作るための設定やシェーダー周りの勉強が徐々に行われるようになりました。

Unityが学校内で流行

学生内でUnityがゲームが作りやすくて良いらしいと広まり、3年生以降のチーム制作は大半がUnityを使用してゲームを作るようになりました。
言語がC,C++からC#へ変化して当時は戸惑う事もありましたが、同じC系という事もあり似通っている部分が多く比較的早く馴染めました。
そしてこの経験が今職場でUnityを使っているのでかなり活きてます。

ゲーム業界に入るための就職作品作り


就職作品とは

ゲーム業界にプログラマで入るためには作品の提示を求められる事がほとんどです。
書類選考の際に自らの制作したゲームデータを企業に提出するのですが、その際に提出するゲームが就職作品です。
学校では就職作品の制作は大体3年生の夏から冬にかけてが主な時期でした。
過去に制作したゲームを提出しても良いですが、自らの力量を企業に伝えるという事なので、最新の就職作品は気合いを入れて制作する必要があります。
力量を伝えるという関係上、企業にもよりますがUnityで作成した作品よりもDirectXで作成した作品の方が評価されやすいです。

さらに、ゲームを作るだけでは無く、自分が得意とする分野・強みをアピールできると尚良いです。
自分は通信を使ったゲームを作れるというのは十分強みになり得ると教わりましたので、昔から好きだったTPSゲームを作る事にしました。
3Dグラフィックが扱えることを示すためにもTPSは丁度良いジャンルでした。

自分が作成した就職作品と工夫

オンラインTPSを作るという事で、画面出力を行うクライアント側とゲームの重要な判定(当たり判定等)を行うサーバー側の双方を作成する必要がありました。

クライアント側
既に作成していたDirectX9の描画処理をベースにクライアント側の作成を進めました。
モデルを人間にしてスキンメッシュアニメーションにチャレンジしたくなったのでその処理を組むことにしました。
データ構造が簡単なMMDなどに使用されるpmdファイルを解析する所から始めて、なんとかうまく画面にMMDモデルを表示できた時はとても達成感がありました。
そこからvmdのアニメーションファイルを作成してスキンアニメーションまで出来るようになるまでかなり時間がかかりました。

ゲーム作りでは問題が発生するのは付きもので、
スキンアニメーションの頂点位置をCPUで演算すると時間がかかりすぎて重い事が判明しました。
なので頂点座標計算を頂点シェーダー側に移して高速化する事で解決しました。
他にもシェーダーを触ったついでに光弾の見た目をよくするためにピクセルシェーダーにブラーを掛けさせてみたりと、当時の自分に出来た最大限の工夫を凝らしました。

サーバー側
サーバー側ではデータを受け取って当たり判定を行ったり移動を他のクライアントに伝達する処理を作成しました。
ゲーム実行中に位置情報が正しく受信できているか確認したかったので、コンソール画面に随時デバッグ用情報を出力してサーバー内の動作を確認しながら作成を進めました。
オンラインゲーム好きの筆者としてはチャット処理が出来た時がとてもうれしかったです。

そんなこんなで約半年ほど掛けまして、
ローカルネットワーク内の複数PCで弾を撃ち合える状態までゲームを作成出来ました。
ただ、半年では時間が足りず、サーバー選択を兼ねたタイトル画面とゲーム画面のみしか作成できませんでした。

就活


資格は応用情報技術者試験まで取れまして、他はJ検定などで資格欄を埋めました。
ただゲーム系は資格よりも就職作品が重要視されるイメージです。
就職作品を頑張った甲斐があったのか、就職活動を始めた時に書類選考で落ちる事は非常に少なかったです。
ただ自分は面接がかなり苦手でした。
緊張してうまく喋れなかったり、面接的にNGなネガティブな事まで正直に話していて面接が中々通りませんでした。
しかし何度か数をこなすのと自分なりに面接での反省を繰り返し行った結果、無事ゲーム会社の内定がもらえるようになりました。
第一志望で行きたいゲーム会社がある場合は面接に慣れるように対策を打ってから向かうのがお勧めです。

あとがき


学生時代に行ったことをつらつらと書いてみましたが、毎日がとても楽しく、時期によってはとても大変でした。
手を抜く事も出来ましたが、高い学費を払っているのに勿体ない上、自分の首を絞めるだけなので精一杯の努力をしました。
努力をした結果に身についた知識が、回りまわって今の自分を助けていて、無駄では無かったと強く思えます。

学校の良い所は他の学友と意見交換しながら知識の共有が出来る事です。
どうしても理解が出来ない箇所を相談したり、逆に尋ねられた時は教えたりといった事が出来たのはとても良かったと思います。
当時色々と相談に乗ってくれた学友には今でも感謝の気持ちでいっぱいです。

そしてこの記事がゲーム業界を目指す人の参考になれば幸いです。