今作っているUnity製アプリ『空とにゃんこと風船と』の紹介をさせてくださいな
おーす! 未来のUnityチャンピオン! (ポケモン風挨拶)
このブログではUnityのテクニックだったりチュートリアルをメインに扱っているのですが、その傍らでこっそりとUnityでアプリを作っていたりします。
その名も『空とにゃんこと風船と』。お察しの通り猫が風船で空を飛ぶ癒し系ゲームです。
やっぱり実際の開発で使ったテクニックを紹介した方が使いやすいよね、なんて思ってアプリを開発したので、その紹介をさせてくださいな。
リリースの目処が立ったのでやっと周知できるようになりました。2019年1月中にはリリースできます! ……多分。
※追記(2019/1/25)
なんとか1月中にリリースできました!
ダウンロードは以下のリンクから。
環境
macOS 10.14 Mojave
Unity2018.2.20f1
アプリの概要
アプリのタイトル | 空とにゃんこと風船と |
ジャンル | アクションゲーム(避けゲー) |
対応機種 | スマートフォン(iOS/Android) |
金額 | 無料(広告あり) |
リリース日 | 2019年1月(予定) |
開発 | TODOWORKS |
Unityのアセットを作るときはExplorers Lab名義、アプリを開発するときはTODOWORKS名義でリリースしています。中の人は同じtodoなので、今考えると分ける必要もなかったかなーと思っていたり。
ジャンルは「癒し系縦スクロール避けゲー」です。
風船職人として働いている主人公のショコラ(デフォルトネーム)が、風船職人としての力試しをするため、自分の作った風船で空高く飛ぶゲームになっています。
空では風船を狙って鳥やUFOなどの敵が飛んでくるので、彼らを避けつつ高みを目指すのが目的です。
幼馴染の白い猫・タルトのお店では空の旅に役立つアイテムを買うことができるので、空に散らばるコインを集めて、良いアイテムを買ってさらなる高みを目指していくゲームになっています。
オープニングの紹介
動画作成にもハマって精一杯のPVを作ってみました。まずはこちらをご覧あれ。
うーんかわいい(自画自賛)
Unity的な観点では、Timelineによるアニメーション制御、テキストアニメーションを使った文字表示がテクニカルなポイントです。
TimelineはUnity2017から追加された機能で、時間軸に沿ったアニメーション制御が可能なんです。超便利。
特に何が良いかって、キャラクターの移動とカメラの動きを連動させられること。上で紹介した動画のように、オープニングをはじめとするイベントシーンの演出で最適です。
例えば上のオープニングだと、以下のようにメインカメラと主人公のオブジェクトを同じタイミングで動くようにして、主人公を追いかけるようにしています。始まりと終わりの位置を指定すればカーブで補間してくれます。
テキストアニメーションについては、1文字ずつPrefabをインスタンス化して表示し、それを動かすようにしています。この辺りはコルーチンで制御してみました。フレームまたぎの処理についてはコルーチンを使うと便利ですね。
ゲーム画面
ゲームは敵を避けながらコインを拾いつつ、高さを競う簡単なルール。画面が上にスクロールしていくので、その中を動き回って敵を避けていきます。
敵に当たると風船が割れてしまいます。3個あった風船が全部割れるとゲームオーバーになります。
アイテムを3つまで持ち込めるので、上昇速度が強化されるブースターだったり、ダメージを数回防いでくれるエプロンなどを使って、より高みを目指していきます。
高さや拾ったコインの数はランキングとして表示されるので、トップランカーを目指しましょう。
Unity的な観点ではColliderによる衝突の検出、Playerをカメラが追いかける処理、Update()でのテキスト更新など、基本に沿った処理がほとんどです。基本をマスターしていればゲームは作れちゃうんです。
ランキングに関しては、自前でサーバを用意してサーバサイド開発をして……とやると地獄めいた工数になりそうだったので、バックエンドサービスとしてGameSparksを利用しています。個人開発者や小規模のゲームスタジオなら100,000MAUまで無料で使えるライセンスもあるのでお財布にも優しいです。月10万ユーザーって結構な数なので、多分大丈夫でしょう。多分。
お店
お店ではアイテムを買うことができます。
ゲーム中に拾ったコインや、ゲームオーバー時の到達距離に応じてもらえるランクボーナスのコインを集めてアイテムと交換できます。
アイテムには上昇速度の強化、操作時の移動スピード強化、ダメージガード、風船による上下のブレ減少、敵の出現率減少、コインの出現率増加の6種類があります。この中から好きなアイテムを3つまで持ち込み、ゲームをより有利に進めることができます。
例えば早く距離を稼ぎたい場合はブースターなどの上昇速度を強化するアイテムを持ち込むと良いですし、安全に進めたい時にはダメージガード系のアイテムを持ち込むのがおすすめ。プレイヤーの好みに合わせて持ち込むアイテムをカスタマイズする楽しさがあります。
Unity的な観点では、アイテムの情報をScriptableObjectで管理している部分が工夫ポイント。大元のデータはExcel……というかMacのNumbersを使って表で作り、csvでUnityに取り込んでいます。そのデータをEditor拡張で書いたスクリプトによってパースしてScriptableObjectを作って……といった感じでアイテムデータを用意しました。
ScriptableObjectにしてデータを持っておくと、Unity側で値を取り出しやすく、処理も早い(気がする)ので便利です。
このあたりのEditor拡張の話もそのうちこのブログで扱いたい……なんて思いながらいつになるかな。
ランキング
せっかくなのでランキング機能も実装してみました。GameSparksというバックエンドサービスがあるので、ここと連携させています。
アプリの規模にもよりますが、ユーザー同士でスコアを競い合えるタイプのゲームだとバックエンドサービスがあるとありがたいですね。自前でサーバ開発を行ってランキング機能を実装するのでもいいですが、サーバを準備して、DB立てて、サーバサイドのコード書いて……なんてやってると工数にダイレクトアタックなのが悩みどころ。私一人で寂しく開発しているので、ここまで工数割くのは無理と判断し、バックエンドサービスを使っています。
バックエンドサービスには、日本語で使えるニフティクラウド・モバイルバックエンド(mBaaS)、Googleが買収してマニュアルが充実しているFirebase、ランキング機能が簡単に使えるGameSparksなどなど、いくつか種類があります。
上で挙げたバックエンドサービスはどれもUnityと連携できるようにSDKを用意してくれているので、アプリで使いたい機能に合わせて選ぶことができます。今回はランキング機能の存在と、クラウド上でJavascriptのコードが書ける機能があったことからGameSparksのサービスを導入してみました。
……マニュアルが全部英語で泣きそうになったのは内緒です。
実績機能
アイテムを準備して旅に出て、旅で得たコインでアイテムを買ってまた旅に出て……と繰り返す系のゲームなので、どれくらいやっていたかが分かるプレイレコードを確認することができます。
プレイデータの各カテゴリで一定の条件を達成すると、下記のトロフィーを獲得することができます。トロフィーを確認する場合は画面上のボタンで切り替えます。
達成したランクや到達距離に応じてトロフィーを獲得できます。トロフィーごとに報酬コインをもらえるので、より良いアイテムを買うことも可能です。
こういうトロフィーっていっぱい集めると気分がいいですよね。
トロフィーの内容についてはアイテムと同じくScriptableObjectを使って管理しています。好きなんです、ScriptableObjectを使うのが。人によってはJSONで管理した方が楽だぜ!! という方もいるかと思いますが、自分が管理しやすい方法を取るのが一番いいかと思います。
ボクセルアート
このゲームに出てくるキャラクターはボクセルアートで作っています。2018年にボクセルアートにハマったので、是非ともゲームを作ってみたかったんです。
どこかレトロな雰囲気を残しつつ3Dオブジェクトを自在に動かすのが楽しくて楽しくて。
ゲーム自体はシンプルなものにして、ボクセルアートの雰囲気を楽しめるゲームを目指して『空とにゃんこと風船と』を作ってみました。
なので是非雰囲気だけでも味わってみてください! お願いします!
まとめ
自分で作ったアプリ『空とにゃんこと風船と』の紹介でした。持てる知識をぶっこんで作ったアプリです。
2019年1月リリース予定なので、もうすぐ出る……はず! 今頑張ってリリース準備をしています。
リリースされたら是非ダウンロードを……! いや、ダウンロードとは言わないまでも、誰かにシェアしてもらえたら嬉しいです!
※追記(2019/1/25)
何とかリリースできました!
レッツダウンロード!
ゲーム開発の攻略チャートを作りました!
-
前の記事
技術ブログだって一年の振り返りをしたっていいじゃない。 2018.12.31
-
次の記事
【Unity】ScriptableObjectってなんなん? って時に読む記事【解説】 2019.01.30
コメントを書く