このページを正しく表示するにはJavascriptを有効にしてください。
Unityで2Dゲーム作りに挑戦してみた
Unity5で2Dゲームを作ってリリースしてみました。
Downloadはこちらから。iOSは今申請中です。
[http://pistatium.github.io/witch_flight/](http://pistatium.github.io/witch_flight/)
## なぜUnityをやろうとしたか
普段はツール系アプリをメインで作っているのですが、ツール系アプリの場合どんなアプリを作るかというのを考えるのが地味に大変だったりします。個人で作るからには自分が作ってみたい(or 使いたい)アプリだけを作りたいですし、かと言って既にあるアプリをただ再開発するのも面白くはありません。このアプリ作れば面白そう!みたいなものは考えて出るというより突然思いつく事が多いのでそのタイミングを待っていると手が空いてしまう事がよくあります。
そこで空白期間を減らすためにゲームを作ってみることにしました。アクションゲームであれば初期のアイデアをあまり練る必要無く取り掛かることができます。例えば「避けゲーを作る!」みたいな事だけを決めれば十分で、あとは実際に手を動かしながら操作性やゲーム性を作っていけます。実際今回も「糸通し」的なアプリを作ろうと思い開発を始めました。
ゲームを作る上でフレームワークが色々あるのですが、今回はUnityを選択してみました。
Unityを選んだ理由としてまず第一にAndroidとiOSを移植コスト無しで作って出したかったというのがあります。自分はAndroidが好きなのでAndroidメインで開発したいのですが、周りはiOS派が多くを占めているので遊んでもらうにはマルチプラットフォーム化が必須です。あとiOSデベロッパー登録しているので多くのアプリを出して年間登録料をペイできるようになりたいというのもあります…。
マルチプラットフォームだけならcocos-2dxやUnrealEngine、WebView系など選択肢があります。WebView系は以前enchant.jsを使ってゲームを作ってみた事があるのですが、主にパフォーマンス面で難点があったので今回はネイティブにすることにしました。
あとは使用言語ですね。ネイティブのマルチプラットフォーム系フレームワークはC++を利用する事が多いのですがUnityであればC#を利用することが出来ます。今回はゲームの作り方を覚えたい事もあって、言語の学習コストが低いC#の方がゲーム作りに集中できると思いました。インターネットに転がっているドキュメントや知見が豊富なのも魅力です。
## Unityはじめ
Unityを始めるにあたって公式のチュートリアルを参考にしました。
[http://japan.unity3d.com/developer/document/tutorial/2d-shooting-game/](http://japan.unity3d.com/developer/document/tutorial/2d-shooting-game/)
2Dのシューティングゲームを作るためのチュートリアルです。
セットアップの方法、プレーヤーの挙動、ゲームの管理などなど2Dゲームを作る上でひと通りの事を学ぶことが出来ます。最初はこれ通りチュートリアルを実行して勉強しました。Unityが物理演算や衝突判定をやってくれるので、想像していた以上に簡単にシューティングゲームを作ることが出来ました。普通はプログラミングが「主」となって開発していくと思うのですが、Unityでは「従」的な要素が強く大半がUnityのGUIによる開発なのが新鮮でした。これでマルチプラットフォームにも対応できてしまうのですから全能感が凄いです。
## WitchFlight作成
チュートリアルをひと通り終えたところで今回のゲーム開発を始めました。先ほど書いたように「避けゲー」を作るくらいしか決めていなかったので、とりあえずゲームが面白くなりそうな動きを決めて、そこからデザインを当てていくことにしました。物理演算を色々試してみたり、クリックイベントに挙動を割り当てたりしてどんなゲームにするかを決めていきました。シンプルに遊べるゲームを作りたかったので、「ポートレイト(画面縦持ち)」「ゲーム中にボタンを入れない(画面中のどこかをタップすれば遊べる)」「テンポよく遊べる」点はこだわって操作を考えました。
上方向に進んでいくスクロールゲーム的な動きが決まってきたので、そこからデザインを考え始めました。デザイナーさんに依頼するほどしっかりしたゲームでは無いのですべて自前で頑張る必要があります。紙にラフを書いて後でフリー素材とかでやっていこうと思っていたのですが、ラフを書いているうちに手書きっぽいゲームもありかなと思いそのままラフを素材化してみました。適当に描いたものをスマホのカメラで取り込んだので線の太さがバラバラですが気にしない…。
あとゲームを作るにあたりこの本も買って参考にしました。チュートリアルだけだと情報が不足しているので、この本を読んで他のUnityの機能についても包括的に勉強しました。3Dに大半が割かれている本ですが2Dでも利用できる機能が多く(というよりUnity2Dは3Dの機能限定版みたいなもの)、後半に出てくる2Dサンプルもフラッピーバード風ゲームで今回作りたいものにマッチしてとても参考になりました。
C#自体も初めてだったのですがJavaに文法が似ているので非常に書きやすいです。Unity自体あまりコードを要求してこないこともありC#の文法はほぼ場当たり的にしか調べませんでした。調べたのも継承やsuperクラスのメソッド呼び出し方とかだけです。C#自体も良さそうな言語なので、いずれじっくり勉強し直したいと思いつつ、ゲームづくりを優先して進めました。
## Asset Store
Unityで特徴的なのがAssetというプラグインみたいな機能ですね。他人が作成したプログラムをライブラリとして取り込むことはよくありますが、Unityの場合ライブラリとゲームオブジェクトが一緒になったような形でやりとりすることが出来るみたいです。今回スクリーンキャプチャ関連で一つAsset買ってみましたが最初仕組みがよく分からなくて使うのに苦労しました。ライブラリのように利用できるAsset以外は正直今もあんまりよく分かってません。
## 各プラットフォーム向けビルド
ゲームを作る部分ではほとんどプラットフォームを気にする事無く作っていけます。しかし最終的なゲームは各プラットフォーム別にビルドしていかなくてはなりません。Unityはこの点でも優れていて簡単にAndroid用やiOS用に書き出すことが可能となってます。iOSの場合はUnityがXcodeProjectを吐き出すのでそれをXcodeからビルドする必要がありますが、AndroidはUnity上からそのままビルド可能です。Unityの開発環境で見てたものがそのままAndroidアプリになるのは、実際やってみると凄さが分かります。公式サポートされていない言語で動かそうとするとセットアップが上手くいかなかったり、実機での挙動がおかしかったりするのがつきもの(?)ですが、一片のエラーも見ること無くネイティブアプリに変換できてしまいました。ベータ段階ですがHTML5のWebGLに書き出すことも出来てしまいます。Unityすごい。
あとクラウドビルドという機能があって、レポジトリを登録しておくと自動でWeb,Android,iOSをビルドしてくれる公式サービスがあります。DeployGateみたいに配布まで可能なのでとても便利です。
## チューニング
なんだかんだで一番時間取られたのがゲームのチューニングです。ゲームの機構を作るよりゲームの難易度調整のほうがはるかに難しいです。特に自分はゲーム下手な方なのでうまい人にとってやりごたえのある難易度というのが全然把握できません。自分に合わせると緩くなりすぎてしまいますし、かといって厳し目にすると全くの回避不可能になってしまうのではないかという危険があります。こればかりは他人にテストプレイを頼んでチューニングするしかないですね。ちなみにテストプレイしてもらったらあっさり開発者の最高記録を抜かれました。つらい。
## リリース
といった感じでゲームが完成しました。勉強込で約1ヶ月、ゲーム自体の開発は20日前後で完成です。慣れれば10日くらいには縮められそうです。もし次回ゲーム作るならデザインとデバッグを複数人で分担して作りたいです。品質面でやはり分業はすべきだと思いました。
WitchFlight よかったら遊んでみてください!
iOS審査早く通るといいな。
[http://pistatium.github.io/witch_flight/](http://pistatium.github.io/witch_flight/)