私がUnityを独学してゲームプログラマーに転職した方法
「Web系のプログラムは組めるけど、ゲームは無理かな…」
ゲームプログラミングって難しそうなイメージがありますよね。
私もそうでした。
私は業務系Webアプリケーション開発の仕事をしていたのですが、ふとしたことからゲームプログラマーを志し、独学でゲーム開発技術を学び、今ではスマホゲームのプログラマーをやっています。
昨今のスマホゲームの爆発的ヒットによって、ゲームプログラマーの需要が急増していて、ゲーム開発経験のない人にもゲームプログラマーになるチャンスが十分あります。
私の場合、
- Unityを本やWebサイトで独学
- 個人でかんたんなゲームを作る
- 求人に応募して採用された!
という手順でうまくいきました。
そんなわけで今回は「Unityを独学してゲームプログラマーに転職した方法」を紹介します。
Contents
ゲーム開発って難しい?
これまでに何度かゲームを作ってみたいと思ってチャレンジをしてきましたが、DirectXを使ったゲームのソースコード見た時には、
「意味わからん、こりゃ無理だわ(´・ω・`)」
と思ってあきらめました。DirectXのコードを見ると確かにゲーム開発はWebなどに比べて難しそうです。
そんなある日、書店でUnityの本が目に入り、手に取ってパラパラと眺めてみたところ、
Unityなら俺にもできる!
「どうせ難しいんでしょ?」と思って手に取ったのですが、コードも短いし、やってることもなんとなくわかる気がしました。
「これならいけるんじゃないか!?」
と思ったんです。DirectXは言語がC++なのに対し、Unityは言語がC#、JavaScriptなので読みやすかったのもあると思います。
ゲーム開発には高度な数学やゲームアルゴリズムの知識が必要?
ゲームプログラマーを志す際のハードルとして「ゲーム開発には高度な数学やゲーム特有のアルゴリズムの知識が必要なんじゃないか?」というものがあります。私は数学が苦手なので、「やっぱ無理かなぁ」と思っていたのですが、実際今ゲームプログラマーをやれています。
数学の勉強をしたわけではありません。
Unityが重力処理や当たり判定、フレーム制御などの低レベル処理をやってくれるので、高度な数学やゲームアルゴリズムを自分で実装しなくてもゲームを作れるんです。
Unity学習のポイント
手を動かしながら学ぶ
Unityで学習すべきことは大きく分けて2つあります。
- 開発ツールの使い方
- コードの書き方
Unityの開発ツールはかなり高機能でコードを書かなくても、かなり多くのことができます。コードを書くにしてもツールとの連携が必須なので、ツールの使い方を覚えることは重要です。
コードの書き方は本やWebサイトを見るだけでもけっこう頭に入りますが、ツールの使い方は実際に手を動かして血肉化しないと使いこなせるようになりません。
私の場合、先に本を数冊ざっと読んでみて、「だいぶ基礎的なこと分かってきたな」という段階で、Unityを使い始めたのですが、いざやってみると、何もできず呆然としました。
そこで、ドットインストールのUnity講座をやってみました。動画の通りに手順を実行していくと、本で書かれていたことが思い出されて、知識が血肉化していく感覚がありました。
言語の学習なら本を読むだけでもある程度できますが、Unityは言語 + 開発環境なので手を動かすことが重要です。
ですから、
- 本を読みながら手順通り操作してみる
- ドットインストールのUnity講座をやってみる
のがおすすめです。
やっていく内に自然と操作方法やUnityの特徴がわかってきます。
[UnityOnlineText]
Unityの特徴
ツールとコードのスムーズな連動
Unityの一番の特徴はUnity Editorというツールです。
3Dや2Dのオブジェクトを配置して、配置したオブジェクトを操作するスクリプトを張り付けます。
ドラッグアンドドロップなどの作業で直観的に操作できるんです。
ゲーム内のオブジェクトとそれを操作するスクリプトがセットになるので自然とコンポーネント分割がなされ再利用しやすい設計になりやすいのもポイントです。
また、ゲーム内のオブジェクトにはタグをつけることができて、例えばツール上で”Enemy”というタグを敵キャラのオブジェクトに付けておけば、タグ名で検索して全敵キャラのオブジェクトを取得してまとめて操作するコードが書けます。このような便利な仕組みがたくさんあります。
アセットストアを活用すれば一から作る必要はない
UnityにはアセットストアというUnityで再利用可能な2D/3Dモデルや音声素材、プログラムの部品を配布しているサイトがあります。
この中にCompleteProjectというカテゴリーがあって、ゲームのひな型となるプロジェクト一式のセットになっています。これを元に作れば、元からできてる部分を見て作り方を学べる、かつ作る手間が省けるので早く効率的な学習 & 開発ができます。
私が以前作ったゲーム、
もアセットストアにあるMecanimExampleScenesというCompleteProjectをひな形に使っています。
3Dモデルやアニメーションが作れなくてもOK
アセットストアには3Dモデルや再利用可能なアニメーションデータもたくさんあります。
Unityの3Dモデル・アニメーションの形式にMecanimというものがあります。Mecanimは3Dモデルの関節の形式などの共通フォーマットなので、Mecanim形式に対応した3Dモデル・アニメーションならば、別の3Dモデルにも同じアニメーションを適用することができます。
例えば、ユニティちゃん3Dモデル用に作ったアニメーションをプロ生ちゃん3Dモデルに適用することができるんです。
またMMDの3DモデルをMecanim形式に変換するMMD4Mecanimというツールもあるので、MMDの初音ミクをUnityで動かすこともかんたんにできます。
サーバ連携もかんたん
リアルタイムマルチプレイ通信ならPhotonCloud
モンスターハンターや白猫プロジェクトのようなリアルタイムに複数プレイヤーが動きまわるゲームを作るのもUnityであればかんたんに実現できます。
PhotonCloudというクラウドサービスがあって、このサービスが提供するクライアントSDKを使えば、サーバを自分で用意しなくてもかんたんにリアルタイムマルチプレイゲームを実装できるんです。
どれくらいかんたんかというと、複数クライアントでリアルタイムに同期して描画したいオブジェクトにPhotonCloudが提供するモジュールを張り付けてパラメータをいくつか設定すればOKというレベルです。
TCPソケットやWebソケットを使って自前でリアルタイムサーバを実装することもできますが、手間を考えると断然PhotonCloudがおすすめです。
非リアルタイム通信ならWebAPI
リアルタイムではなく、単発の通信でスコアの記録などをさせたい場合はWebサーバとREST APIを用意すればOKです。UnityにはかんたんにHTTP通信するためのAPIが用意されています。
サーバーサイドの言語はPHP, Perl, Ruby, Python, Java, Node.js, Go等の好きな言語を選べばOKです。
私はNode.jsとRubyを使いたかったのでVPSサーバを借りていますが、PHPだったら安価なレンタルサーバでも動かせます。
ゲームが完成したら宣伝する
ニコニコ動画、Youtube、はてな匿名ダイアリー、無料プレスリリース、ブログ、Twitter、Facebook、qiitaなどで宣伝しました。
リリース後、数日はアクセスが2000くらい来ましたが、その後はすぐに減ってしまいました。
なのでリアルタイムマルチプレイゲームを作っても、プレイヤーが一人しかいないという状況になりやすいので、一人でも複数人でも楽しめるゲーム構成にするのが良さそうです。
Unityエンジニアとして採用されるためにすること
Unityをある程度習得したら、Unityエンジニアを募集している企業に応募します。
私の場合、いくつかの企業からは「ゲーム開発の実務経験がない」という理由で落とされましたが、採用してくれる企業がちゃんと見つかりました!
Unityエンジニアは需要に対してエンジニア数が追いついていないので、今がチャンスです!