見出し画像

Unity1Week 「ためる」 貯メイズ 開発記録

2022/9/5~11の1週間ゲームジャム(お題:「ためる」)に参加した四次元ベクトルです。
ゲームはこちらからプレイできます。

前回の制作記録はこちら

前回の振り返り記事はこちら

今回のゲームは、次の日程で開発しました。

1日目(9/5 月)

アイデア

今回のお題は「ためる」ということで、次のようなことを考えました。

  • お金を「貯める」

  • エネルギーを「溜める」

  • 水を「溜める」

まず、水を指定の量だけためる(指定量に近いほど高得点)ゲームを考えましたが、単純すぎてつまらないので却下しました。
次に、盤面を上下左右に移動してお金を貯めるパズルゲームを考えました。今回はこちらを採用しました。

ただ単純にゴールを目指すだけでは面白くないので、ステージごとに目標金額を設定し、これ以上のお金を集めればクリアというものにしました。
ステージの生成の方法は、自動生成、開発者があらかじめ用意しておく、クラウドを利用しみんなに作ってもらう、の3案を考えました。
3案それぞれの長所を挙げると、

  • 自動生成……無数のステージで遊べる。開発者がステージを作る必要がない

  • あらかじめ用意しておく……ゲームの達成度が分かりやすい

  • みんなに作ってもらう……プレイヤーがステージを作るのは楽しく、また投稿されたステージをみんなが遊べるので、盛り上がる

欠点を挙げると、

  • 自動生成……面白くないステージや、クリア不能なステージができる可能性がある。目標金額の設定が難しい

  • あらかじめ用意しておく……開発者が何十ものステージを用意するのは時間と労力が必要で、1週間に間に合わない可能性がある。ステージの数に限りがあるため飽きやすい

  • みんなに作ってもらう……ゲーム内にステージエディターを実装する必要がある

今回は、「みんなに作ってもらう」を採用しました。

ゲーム制作

今回は、Unity 2021.3の2D URPテンプレートからプロジェクトを作成しました。
ステージのマスや、マスの数字などの表示の実装を行いました。
マスの種類は以下の通りとしました。

  • スタート:盤面に1つだけ

  • ゴール:盤面に1つだけ

  • 空白:何も起こらない

  • 所持金増加:数字の分だけ所持金が増える

  • 所持金減少:数字の分だけ所持金が減る(所持金がマイナスになる場合は通行不可)

  • 所持金2倍(後に3倍も追加)

  • 岩:通行不可

  • 穴:一度通ったマスで、通行不可

当初、所持金が半分になるマスも考えましたが、マスへの表示方法(数字・アイコン)に悩むことや、なくてもゲームとして成立するということで取り下げました。
プロジェクトの作成が夜だったので、この日はあまり制作を進められませんでした。

2日目(9/6 火)

この日は台風で午前中仕事を休んだので、この休みを利用してゲーム制作を進めました。
ステージ上のマスを移動してお金を集める仕組みを作りました。
また、ステージエディターを実装し、データを保持してプレイ画面(プレイテスト)との間の移動ができるようにしました。
エディターは、当初、アイテムのアイコンをドラッグ&ドロップで盤面に置いていくものを考えましたが、実装や操作が難しいと思いました。そこで、アイコンをクリックで選択し、盤面をクリックするとそのアイテムを置くようにしました。

3日目(9/7 水)

この日も午後に仕事の休みを取りました。
プレイ後の結果画面を実装しました。
ステージのクラウドへのアップロードのため、ステージデータをJSON形式(クラス→文字列)で書き出し・読み込みができるようにしようと思いましたが、そのままではJSONにステージデータを書き出せませんでした。調べてみると、JSONは2次元以上の配列を扱えないことが分かりました。そこで、ステージのマスのデータは縦と横のマスの数を記録して、1次元の配列に変換しJSONに書き出すようにしました。

JSONでの書き出し・読み込みができるようになったので、NCMBのデータストア上に、ステージ名や作者名などと一緒にステージデータをアップロードできるようにしました。作者名はローカルに保存し、次回入力する必要がないようにしました。また、アップロードされたステージの一覧を表示し、そこからステージをプレイすることもできるようにしました。
これで、ゲームの基本システムは完成しました。

4日目(9/8 木)

この日も午後に仕事の休みを取りました。
ゲーム画面のデザインを行い、アニメーションや音も付けました。
アイテムの入手時に、アイテム画像を大きくすると同時にフェードアウトさせたら、右や下のマスと干渉したので、単純にフェードアウトするだけにしました。

5日目(9/9 金)

タイトルロゴ作成やUIのボタンのデザイン、一部キーボード操作への対応を行いました。
ここで気づいたことですが、DOTweenのToで所持金(int型)のアニメーションを行うと、int型の上限(2,147,483,647)に近い大きな数になる場合、不正確な値の表示になりました。どうやっても解決しないので、仕方なくOnCompleteで実際の値を表示するようにしました。

6日目(9/10 土)

ゲーム内の遊び方説明を追加し、フォントも変更しました。
unityroom用のサムネイル画像は久しぶりに静止画として作りました。

unityroomのサムネイル画像

WebGLビルドを行いました。すると、ステージ選択画面がおかしなことになっていました。開発ビルドにして原因を調べたところ、以下がエラーになっていました。

TimeZoneInfo jstZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("Tokyo Standard Time");
updateDate = TimeZoneInfo.ConvertTimeFromUtc(updateDate, jstZoneInfo);//JSTに変換

どうやら、NCMB上の日時(UTC)を日本標準時(JST)に変換するSystem.TimeZoneInfoがWebGLに非対応のようでした。そこで、以下のようにして対応しました。

updateDate = updateDate.AddHours(9);//JSTに変換するために9時間を加算

7日目(9/11 日)

unityroomへ投稿しました。開発者の私もステージをいくつか作成・アップロードしました。
投稿後や公開後も、機能の改善や不具合の修正を行いました。

最後に

今回のUnity1Weekで、遅刻なしの7連続参加となりました。
遅刻がないのは、仕事があまり忙しくないことや、フリー素材の利用、作るゲームが2Dでシンプルなことなどが理由として挙げられます。
今回は、ステージの作成・アップロード機能という、私としては初めてのことを実装しましたが、余裕で1週間に間に合いました。
ゲーム制作は大変ですが、やりだしたら何時間も熱中してしまいます。今回も私は1日10時間ほどPCに向かっていた日があり、目が大変疲れました。やりすぎには注意です。

みんなもゲームを作って遊んで楽しんでください!
本ゲームへのステージ投稿もよろしくお願いします!

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