見出し画像

実質2日間でUnityのゲームを作る話

こんにちは、カキレモンです。Unityでゲームを作って3年目くらいになります。先日12月末にちょっと久しぶりに7回目のunity1weekに参加したので、そのレポートを書きます。

今回のテーマは「あける」でした。電子ロックを模したパズルを解いてドアを解錠するというシステムで、シンプルなスコアアタックを作りました。

ちなみにこの記事の真の目的の1つは、まだUnity歴のそれほど長くない方にクラス設計(SOLID原則など)のトピックをそれとなく布教することで、途中に参考記事のリンクなども貼っているのでぜひ読んでください。僕はUnity3年目にしてクラスの設計や原則の概念を最近知ったのですが、もう少し早めに知りたかったです。

さて、今回のunity1weekではタイトルにもある通り、スケジュール的に(PC上の)作業時間が2日分ほどしか取れませんでした。これまでのunity1weekでは、十分に時間がとれない回は参加を見送っていたのですが、今回は場当たり的に挑戦してみることにしました。


12/21~12/25:準備期間

課題やらの合間を縫ってネタを出したり設計を考えたりしています。今回は実装がぶっつけ一本勝負なので、あらかじめ仕様をなるべく詳細に決めておく必要がありました。

というより主に、最近読んだこの記事に感化されています。非常に参考になったので、クラス設計の話を聞いたことがない人はぜひ読んでください。

ちなみにこれは僕のメモ帳です。UMLとかそういうものとは程遠いですが、こんなのでもまとめておくと実装時に考える時間は少し減りました。

画像1

12/26:Day1(世間ではDay 6)

見出しは少し嘘で、Day1は実際は12/25の夜から始まりました。設計は立ててあるものの、細かい部分は実際に動かしてみないと分からなかったので、まずは「パズルを1つ解ける」というところから始めてボトムアップに実装していきます。

ところで、ボトムアップに作っていくと依存関係がめちゃくちゃになって途中で一度死ぬ、というのが過去のunity1weekでのお約束であり課題の1つでした。今回は前述の記事にならって、依存関係にも少し気を使って設計しています。そのかいあってか、今回は途中で詰まることがほぼなく実装だけに集中できたように思います。

具体的には例えば、各パズル共通の処理をインターフェースにまとめたり、Observerを使ってパズルの結果の送信を依存関係の逆転なく行えるようにしたりしています。

ただしこのあたりは明らかに付け焼き刃の知識です。ちゃんと調べたい方は「SOLID原則 Unity」で検索すればtoRisouPさんの分かりやすい解説のスライドを見つけることができます。

だいぶ話がそれましたが、最終的にはこの1日でゲームの根幹である「連続で出現するパズルを解く」というシステムがなんとか実装されました。

ちなみにこのドアの画像はパワポで適当なグラデーションをかけてでっちあげたものです。質素ですがベタ塗りよりは味があるのかな、と思っています。個人的には。

12/27:Day2(世間ではDay 7)

この日の半分はBGMのフリー素材を探したり効果音を作ったりしています。これに関して特筆すべきことはありません。

残りの時間でシステム系の○○Managerやタイトル・リザルト画面を作りました。UniTaskのキャンセルをうまく使いたかったのですが結局よく分からず、泥臭い実装になりました。その辺りは今後の課題です。

ちなみに提出期限の20時をとっくに過ぎているのですが、遅刻常連だったのでもはや気にしていません。毒を喰らわば皿までというので、音量調節機能と微修正は翌日に回して就寝します。

12/28:公開

9時頃にようやく公開することができました。とりあえず今のところバグや(システム的な)不具合は見つかってなくて、それだけは安心しています。

また、一部の問題の意図がわからないという意見を各方面からいただいております。仕様策定時にもう少し想像力があればそもそもこの問題はオミットしてしまうか、あるいは伝え方をもっと工夫するべきでした。次回作にご期待ください。

おわりに

最初にも言いましたが、この記事の肝は「クラス設計はいいぞ」の一言に尽きます。

クラス設計の利点の1つは、実装時の余計な手間(あるいは、大規模なリファクタリングのリスク)が劇的に減ることです。実際、僕がこれまでに参加したunity1weekに比べれば驚異的なペースで完成しました。

ということで、1人でも多くの方に「クラス設計」の概念とか「SOLID原則」という言葉を知ってもらえれば幸いです。これを知っていることがどのくらい役に立つのかは人によるかもしれませんし知らなくてもできる人はいると思いますが、まあ知っていて損はないと思います。

以上です。はじめての投稿なのでいい締め方がわかりません。よいお年を。


この記事が気に入ったらサポートをしてみませんか?