🎮

一週間でUnity(C#)入門&自作ゲームをリリースした夏休みの日記

2021/08/20に公開

8月9日(一日目)

「暇だし夏休み最終日までに超クールなゲーム作ってリリースしちゃおうかな〜」
真昼間に目を覚ましたダラダラ9連休の3日目、シャコシャコと歯を磨きながらそんな決意をした。

自分は昔からゲームが大好きなのだが、何がどうなってゲームが動いているのかは全然わかっていない。もちろん、UnityもC#も触ったことがなく、何から手を付けるべきかもわからない。なので、自分はとりあえず、こんなときいつも助けられてきたudemyで講座を探し始めた。udemyは本当にスゴい。これは嘘だが、母方の祖母もよく「困ったらudemy」と口にしていた。

色々ザッピングする中で、『Unityゲーム開発入門:Unityインストラクターが教えるマリオ風2Dアクションゲームを作成する方法【スタジオしまづ】』を発見した。

「この講座が終わるころにはマリオが作れる。たぶん、ちょっと工夫すればロックマンXとかも作れる。」そう心の中で思ったとき、スデに購入を終えていた。

8月10日(二日目)

早速Unityのスゴさがわかってきた。

例えばこんな感じで「Text」と「Button」と「Image」を選択するとオブジェクトができて

あとはサイズなりをチョチョイといじればそれっぽい画面が完成する。

これは極端に簡単な例だが、UIに関してはほぼこんなノリで作れてしまう。フィールドも、キャラクターが走るアニメーションも、攻撃時のエフェクトも、ストアから素材画像を落としてマウスをカチカチしてるだけで作れてしまう。

あとは、そのように作った各オブジェクトに、対応するクラスを定義したC#スクリプトをペタペタしてあげれば、タップ入力で動かせるようにしたり、他オブジェクトに干渉したり、敵を自動発生させたり、BGMやSEを流したりできちゃう。スゴい。

8月11日(三日目)

そんなこんなで感動しつつ、『Unityゲーム開発入門:Unityインストラクターが教えるマリオ風2Dアクションゲームを作成する方法【スタジオしまづ】』を修了した。

かくして自分は、その気になればロックマンXを実装できる男になった。しかしながら、画面切り替え、ボタン押下、標準入力などの機能には触れておらず、具体的なイメージがなかったため、Unity ゲーム開発:インディーゲームクリエイターが教える C#の基礎からゲームリリースまで【スタジオしまづ】も受けることにした。

この時点でもう気合でオリジナルゲームに着手できそうだったが、①講座にGooglePlayへのリリース手順も載っていたこと、②自分がかつてシフトアップネット大好き少年でねおクエを結構やりこんでいたこと、の2点を考慮してやることにした。ちなみにテンミリオンはもっとやりこんでいた。

8月12日(四日目)

昼頃には「これをこうしたら出来るんだろうな〜」という想像がつくようにもなってきており、そのまま特に突っかかることもなくスムーズに修了した。

かくして自分は、その気になればねおクエも実装できる男になった。そしてようやく自作ゲームに着手するぞ〜と思ったのだが、自分はゲーム内容についてなんにも考えてなかった。ビックリした。ということで急遽どんなゲームを作りたいか考え、以下のような結論に至った:

①3日で作り切れそうなボリューム
②短スパンの1ゲームを繰り返す系
『I.Q』のような無機質でスタイリッシュな世界観
④直感的に操作を理解できるようなシンプルさ

①+②+③+④=『3Dキューブを操作するエンドレスラン(色彩判別ゲーム要素付き)』

もちろんまだ3Dは触っていない。だが、高校時代に数学の先生が「次は空間ベクトルですが、平面ベクトルと同じです。一次元増えただけです。」とかいって青チャを50ページぐらいをすっ飛ばしていきなり章末の演習問題を課してきたのを思い出し、「イケるっしょ」とすぐさま着手し始めた。

8月13日(五日目)

まあイケない。ちょっと前まで「もうロックマンX作れんじゃ〜ん」と調子に乗りまくっていたが、いざ自分で新しいデザインや機能を実装してみようとすると頭がこんがらがってしまって上手くいかない。

3Dオブジェクトもやはり思った通りの動きをしてくれない。そういえば、自分はあのとき突きつけられた空間ベクトルの演習問題も「一次元増えただけじゃ〜ん」とかいって全然解けていなかった。

しかし、寝食風呂以外ずっと開発し続けた結果、夕方頃には3Dオブジェクトの扱いに慣れていた。また、夜には一番頭をこんがらがせていたGameObject同士の連携パターンを掴むことができた:

⓪他のGameObjectを操作したいGameObjectにスクリプトをアタッチ
①VisualStudioで⓪のスクリプトに「public {型} {任意名}」でインスタンス生成
②Hierarchyで空のGameObjectを作成し、スクリプトをアタッチ
③Hierarchyで②のGameObjectの{任意名}の部分に⓪のGameObjectをアタッチ
④VisualStudioで①のインスタンスから②のGameObjectを操作できるようになる

普通にpublic static等を使っても他クラスを呼び出せるが、全部上記の方法で固定したほうがGameObjectとスクリプトの関係性が明瞭になる&保守性も高くなると感じたため、連携時はこのフローをなぞるようにした。(※あくまで個人的な意見・方法です)

8月14日(六日目)

引き続き開発を進める。夜になる頃には、当初想定していた全機能の実装が終わり、+αの演出を模索しまくっていた。(ちなみにシンプルイズザベストの精神で全部ボツにした。)

そして、「あとはスマホで動作確認してリリースするだけだ〜」と達成感に浸りながら風呂に入ったのだが、不思議なことに、風呂から出る頃には「グローバルスコアランキング機能つけるぞ〜」と思っていた。

もちろん、Unityの外部API・DB連携については全然知らない。それに、色々と付随する手間が生じることもわかっていた。だが、もうこの時には頭がおかしくなってしまっていたため、髪も乾かさずに技術調査を始めていた。どうやら、ニフクラのMobile Backendというサービスを使えば結構簡単に実装できるようだ。

8月15日(七日目)

そんなこんなで、こんな感じなゲームが完成した。

シンプル&スタイリッシュ、そしてBGMはモーツァルトよりオーボエ協奏曲 K.314 ハ長調。無機質感がどことなく不気味さも感じさせる、自分が3日前に思い描いていた世界観と操作感を実現することができた。

余談

(コロナ禍で対応が遅れているらしく)丸五日がかかったが、無事GooglePlayの審査を終えてAndroidアプリがリリースされました。普通にそこそこ面白いと思うので暇な方は是非やってみてください。

https://play.google.com/store/apps/details?id=com.Hom.HueRunner

この記事でもTwitterでもGooglePlayでも、バグ報告やコメントをくれたら泣いて喜びます。あと万が一需要がありそうだったら、もっといい感じに作り込んで、バックエンドにも課金してAPI関連の制限を取っ払って、さりげなく広告をつけてお金を稼ごうと思います。

Discussion