見出し画像

開発記録:unity1week 「ふる」 ふりかけダイス

2023/6/19~25のUnity 1週間ゲームジャム(unity1week、お題:「ふる」)に参加した四次元ベクトルです。

ゲームはこちらからプレイできます。

前回の制作記録・振り返り記事はこちら

今回の事前準備や目標はこちら


「ふりかけダイス」について

一定時間間隔で、スコアの桁の中から0でない数字がランダムに1つ選ばれてスコアに乗算され、スコアがインフレするゲームです。
スコアの数字をクリックするとその桁の数字が1減り0をクリックすると繰り下がりが発生して9になります。
これを利用すると、スコアから大きな数字が選ばれてスコアが増えやすくなります。

ゲーム画面

名前の由来は、さいころ(乱数)を自動的に「振る」+スコアの数字に「掛ける」ことです(ご飯にかけるふりかけとは関係ありません)。

ランキングや画像付きツイート、実績機能もあります。

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

開発記録

1日目(6/19 月)

この日からの平日5日間の午後に有給休暇を取りました。

今回に向けて、ゲームに使えるいろいろなアイデアを前もって考えていました。
お題が「ふる」と知った時、以下のようにお題から連想しました。

「振る」:バット、容器、さいころ、番号、手、など
「降る」:雨、雪、アイデア、など
「Full」
「古」

今回は「さいころ」が、パズルや計算が得意で雰囲気作りが苦手な私向きの題材だと思い、事前に考えていたアイデアを使えないか考えました。
それらのアイデアの中には、以下のものがありました。

  • いつもはゲームの成績を表すだけのスコアの数字を、ゲーム性にする

  • 音楽に合わせてゲームを進める

そこで、今回は、

  • スコアの各桁の数字をさいころの目に見立て、そのさいころを振って1~9の目を1つ出す

  • その目をスコアに乗算

  • スコアの数字を操作して大きな数字を出やすくする

  • さいころを振るのは音楽のテンポに合わせたタイミングで自動的に行われる

というものに決めました。

アイデアを決めたら、Unityのプロジェクトを作成しました。
今回は初めて、非同期処理のUniTaskやイベント管理のUniRxといったアセットを用いました。また、この前のセールで買ったTrue Shadow(UIにきれいな影を付けられる)も初めて使いました。

背景やUIのデザインは、事前に私が作ったものを使用しました。

スコアの数字を生成し、それをクリックして数が減るシステムや、さいころを振って出た目をスコアに乗算する仕組みを作りました。
スコアはとても大きな数になるので、上限のないBigInteger構造体を用いました。

数字の桁数が多くなると数字が画面からはみ出してしまうので、HorizontalLayoutGroupの幅を広げスケールを小さくして数字が画面に収まるようにしました。しかしそれでは(1行表示)数十桁になると数字が小さくなってクリックしづらくなるので、GridLayoutGroupにして複数行で表示するようにしました(表示領域の幅やスケールの計算が大変でした)。

2日目(6/20 火)

前回のunity1weekで知ったインタラクティブミュージックを、ゲームの進行に応じてBGMが滑らかに切り替わるシステムとして実装しました。
具体的には、複数のAudioSourceで複数曲を同時に再生し(1曲を除いて音量0)、あるタイミングで音量を滑らかに変えてクロスフェードさせるものです。
今回は、以前私がCakewalk by BandLabで作った「きらきら星」を用いました。

また、曲のテンポに合わせて数字が選ばれスコアに乗算される仕組みや、時間ゲージ・ターン数の表示、結果画面の表示も実装しました。
結果画面は、従来の自作ゲームのような画面中央に大きく表示されるものではなく、画面下からボタンを含むパネルがスライドインして表示されるようにしました。

その後、ゲームの進行に応じて背景画像も滑らかに切り替わるようにしました。
これで、ゲームの基本システムはほぼでき上がりました。

3日目(6/21 水)

声や効果音を付け、スコアランキングも実装しました。
声は、音声合成ソフトVOICEVOXで作りました。
スコアランキングは、スコアの常用対数(10が底)をNCMBのサーバーに送信し、スコアの対数をランキング画面内で指数表示(例:1.2345×10^12)にすることで表示します。常用対数の関数はBigIntegerに用意されています。

4日目(6/22 木)

ゲーム内遊び方説明は、以前の自作「数球クエスト!」(お題:Re)と同様のスライド方式で作りました。

その後、初回WebGLビルドを行いました。

5日目(6/23 金)

投稿サイトunityroomに登録後、画像付きツイートを実装し、unityroomへ初回のアップロードを行いました。

スマホでの動作確認も行いました。BGMのループが正常に行われない程度で、遊ぶことはできました。

6日目(6/24 土)

ゲームが完成しても土日ゆっくり休むのはもったいないので、さらに機能を追加して完成度120%にしたいと思い、ゲーム内に実績機能を追加しました。
実績はゲーム内でプレイ数やスコアなど特定の条件を満たすと得られます。未入手の実績はゲーム内で表示されない隠し要素です。
実装に当たり、購入から放置していたアセットEasy Saveを用いました。
これで、ゲームを繰り返し楽しく遊んでもらえるようにできました。

7日目(6/25 日)

前日に実装した実績は公開の方法(非公開、ランキング、Twitter共有)に迷いましたが、ランキングに登録するようにしました。
スコアランキングに用いた従来のゲーム内ランキングではなく、リアルタイムにサーバーに送信される新しいランキングシステム(unityroom専用)を採用しました。
その理由は、実績を入手するたびにタイトル画面の「実績」画面を開くのは面倒で忘れやすい、そもそも実績システムを知らない人もいることです。
新ランキングの欠点は、unityroomにログインしているユーザーしか参加できないことや、複雑な書式設定ができないことなどです。

制作中の気づき

  • DOTweenのFromでTweenの開始値を指定できる

  • TextMesh Proのバージョン3.0.6だとRectMask2DのSoftness(輪郭ぼかし)が反映されないバグがある(詳細

    • Package Managerでバージョンを3.2.0-pre.2に上げると解決

工夫したこと

  • 斬新さ:普通はゲームの成績の指標となるだけのスコアそのものをゲーム性にした

  • 楽しさ:人はデカい数が大好き(u1w共有会「ためる」Hamuさんのトークより)

  • 楽しさ:スコアランキングや、実績を得られることで繰り返し遊んでもらえるようにした

  • 絵作り・雰囲気:Adobe Stockの素材などを参考に、事前に自分で背景やUIなどを作成

  • サウンド:自作曲からのインタラクティブミュージック音声合成による声素材の使用

反省点

  • 自作ゲームの中で運要素が最も大きい

  • お題回収力が弱い(普通の6面さいころではなくルーレットに近い)

  • インタラクティブミュージックとして利用した音楽が雰囲気に合うか少し微妙

  • 公開時に少し不具合が残っていたので後に修正した

  • YouTubeでのプレイ配信を見て、0をクリックすると9を作れることに気づかない人がいると感じた(配慮不足)

最後に

今回も有給休暇をうまく利用して10連続無遅刻参加を達成できました。
ゲーム自体は5日で完成・投稿できたので、その後は機能の追加やバグ修正などに使うことができました(評価期間中も微修正を入れています)。

今回は事前にしっかり準備し、UniRxなどのライブラリや自作曲など初めて使ったものがたくさんあったので、充実したゲーム制作ができたと感じました。

今回も制作期間に入ると深夜に目が覚めて睡眠時間が4~5時間になり、寝不足になってしまいました。

unityroomでのプレイ・評価をよろしくお願いします!

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