Unity 1週間ゲームジャム(2023/12)に、子育てしながら初参加した振り返り

## Unity 1週間ゲームジャムとは
### 概要
[Unity 1週間ゲームジャム](https://unityroom.com/unity1weeks)
Unityを使って1週間でお題に沿ったゲームを作ります。
お題は開始日の午前0時に公開され、今回のお題は「おくる」でした。
このお題は「贈る」のように素直なものでも、こじつけ的なものでも自由です。
### レギュレーション
* 1週間で作る
* お題は開始時に発表
* WebGL形式でビルドし、unityroomに投稿
### 日程
* 2023年12月18日(月) 0時 〜 2023年12月24日(日) 20時
  * ゲーム制作期間（投稿したゲームは日曜20時に一斉公開）
* 2023年12月24日(月) 20時 〜 2024年1月7日(日) 20時
  * ゲーム相互評価期間
* 2024年1月7日(日) 20時
  * 結果発表

## 提出作品
[保育園送り](https://unityroom.com/games/go_to_nursery)
子供を保育園へ「おくる」事を題材にしたミニゲームを製作。
締め切り5分前に滑り込みで投稿しました。

![ss_01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223984/e8e1fa3b-f932-95cf-3295-29bb0df0a75e.jpeg)
![ss_03.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223984/04b3a88f-ff6b-4cbf-07eb-cbaa45d41c5a.jpeg)
![ss_05.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223984/19fd18c4-cbae-3fb7-a094-fd1545cc0551.jpeg)
### 開発中の風景
![play.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223984/6397d8d6-98ef-109c-03db-0e4df46b33fe.jpeg)
* ゲームが分かりやすいので子供に好評（やる気アップ）

## 開発メンバー
### メンバー
* 私(poro)
  * 本職：ゲームプログラマ（主にネットワークだけど）
* 妻
  * 本職：ゲームグラフィックデザイナー

足りない企画は二人で考える。
サウンドはフリー音源を使って空いている人が当てこむ。
連携コストが極めて少ないのが強み（相手のスキル知ってる、近くで作業してる）
### 開発に使える時間
* 子供の寝かしつけ終了後（22:00～23:00）～翌日に差し支えない時間
  * 差し支えないといいつつ、後半3時に寝て7時半ぐらいに起きる生活になっていました…
  * 現実の保育園送りもちゃんとしています
* 土日は子供も家にいるため、日中作業するならどちらかのワンオペ育児が必要です。
  * 基本育児優先、家事・おでかけなどの対応はしっかりする。
  * 習い事など、二人居なくても大丈夫な時間に作業。
* (番外編)有給休暇で1日だけ時間を作りました。
## 事前準備
期間前に行った調査・準備についてです。
もう少し事前に準備できたと感じるものもありましたが、初参加なので妥協。
### 調査
#### バージョン管理
* Unity Collaborate
  * Plastic SCM → Unity Version Controlに移行（2021.3から）
  * 無料枠はあるが従量課金制なので今回はスキップ（クレカ登録必須）
* Git
  * 仕事で使い慣れている。
  * githubが無料で使えるので使ってみる。
    * GitHub Actionsで自動ビルドも可能なようだが、時間がないので見送り
#### CIツール
* Unity Cloud Build
  * Unity Build Automationに名前変更
  * 無料枠はあるが従量課金制なので今回はスキップ
    * 回数も多くないので都度手動ビルド 
#### OSS/Asset導入
* UniRx,UniTask
  * 非同期処理周りの定番らしく、使っている人が多いので軽く調査。
  * C#標準でもasync/await使えるはず＆高機能すぎるので今回は見送り。
    * 結局いつものコルーチンを使用。

### 環境準備
#### Unityインストール
* Unity Hubからインストール。
* LTSから選ぶ。今回は2022.3.15f1。
  * WebGL Build Supportモジュールを追加
#### Visual Studioインストール
* Unityインストール時に同時に入れられる。
  * 今回はCommunity 2022
#### gitインストール
* 安定版の最新を入れておけば良い

### プロジェクト
#### プロジェクトの作成
* 2D(URP)で新規作成
  * CloudとVersion Controlは使わないのでdisable
  * ライトを使わないのでBuild-inでも事足りたが、今後Build-inが使用できなくなる可能性を考えてURPを採用。
* File->Build Settings...を変更
  * WebGLを選択してSwitch Platform
* Player Settingsを変更
  * Company Name設定
  * WebGLのResolutionを960x540(16:9)に
* Gameウィンドウの解像度設定
  * Player Settingsに合わせて変更しておく
* Edit->Preferences...を変更
  * External Tools:External Script EditorにVisual Studio 2022を選択

### 妻（デザイナー）からの要望
* フォント容量を減らすためにも、テキストは抽出しやすいようになるべくスプレッドシートにしてほしい
* 通し確認用のデバッグ機能を作ってほしい
  * ハプニングがランダムなので作りました
* 後で画像差し替えや増減が効くように作ってほしい
  * 画像差し替え or Inspectorで放り込めば済むように実装
## 作業内容
Gitのコミット内容から振り返りなのでややプログラマ寄りです。
書いてない分も、デザインは裏でひたすら作成されています。
### 1日目
* 作品案出し
  * マインドマップを使ってみたが、最後は思いつきと勢いで決定。
    * 1週間で完成させられる物量、体験（子育て）をゲームに、お題ともマッチ。
* 画面イメージラフの作成
* 空のシーンの作成（Title, Game, Result）
* デザイン作業用Prefabの準備
### 2日目
* BGMサウンド検討・仮当て
* 使用フォント検討
* 入力系の整理（InputManager）
* シーケンス遷移の実装（Title→Game→Result→Title→...）
### 3日目
* フォントの準備
* BGM決定
  * テンポ変更やループするように加工。Streaming再生に設定。Loopフラグも忘れずに。
* おうえんボタンの判定・動作実装
* 時間管理の実装
### 4日目
* タスクリストの作成
  * スプレッドシートを使用
  * Trelloも検討したが多機能すぎて見送り
* ゲームの基本システム（おうえん、フェーズ進行、時間管理）を一旦実装
  * 二人しかいないし時間もないので、プログラマが仕様を勝手に決めて作りました。
* フェーズ進行（画面上部の娘マーク）のデザイン組み込み
* 時間管理（時計）のデザイン組み込み
### 5日目
**プログラマは有給休暇取りました・・・（会社も推奨休暇取得日だったので）**
* メイン画面の画像切替＆フェーズ移行時の演出実装
* マスターデータ用のCSVリーダー追加
  * 昔に作ったことがあったので移植
* ハプニングイベントシステム実装
  * データはCSV化して読みこめるように設定
* タイマー停止周りの実装
* おうえんふきだし制御の実装
  * データはCSV化して読みこめるように設定
* Unityroomのプロジェクト作成・設定
  * リリース直前絶対慌てるので早めにやるべきです。公開するまで見られることはないので安心。
  * 「イベント参加」設定忘れずに（対象のゲームジャムを選択）
* GameシーンからResultシーンへのデータ持ち越しクラス実装
* タイトル画面デザインをラフから本番用へ変更
### 6日目
この日の途中でプログラマのメイン作業は大体完了。
細かい追加や、量産作業、サウンド作業、公開設定周りにまわる。
* リザルト実装
* おうえんふきだし量産
* Ready表示＆説明実装
* フォントのTextAtlas更新
  * 使っている文字だけピックアップ
* unityroomへランキング登録する仕組みの実装
  * 締め切り的に諦め気味でしたが、プログラマだけで30分かからずにできたので導入決定（事後報告）。
  * 必要なAPIはGithubで公開されていて、簡単なのでやるべきです。
* ハプニングデータ案出し・量産
  * 実はここまで何を出すか決まっていませんでした…、最終日まで修正することに。
* 細かい調整（ボタンの非アクティブ、進捗管理マークにテンション段階実装、ディレイやテンポの調整）
* 画像アニメーション系が入る
* SEの当て込み
  * 実は一番時間がかかりました。ゲームらしいゲームでないので、合うサウンドが見つからない。
  * 波形編集ソフトでエフェクトかけたりつなぎ合わせたりして作ったSEも結構あり・・・
    * 時間切れ直前警告の目覚まし時計みたいな音（ジリリリリリ）は、単発の自転車ベル（チリン）を加工して作っています。
* 通しプレイ＆デバッグ
### 7日目
最終日は20時締切です。
この時点で仮画像が大量にあり、間に合うかどうかハラハラな状態。
* デザインのブラッシュアップ
  * 仮画像をひたすら本番画像に
  * リザルト演出のパターン増加
* ハプニング周りの追加・調整
* 全体的なバランス調整
  * デザイン間に合ってないのでプログラマの独断でどんどんいじる。
* フォントのTextAtlas最終更新
* リリース用ビルド
  * デザイン差し替えが直前になるのは分かっていたので、事前に一度ビルドしてアップロードまでやっておきました。
* Unityroom用設定
  * 作品説明、操作説明、使用アセット・OSS表記
  * アイコン作成、スクリーンショット作成
* Unityroom上での動作確認
* リリース＆公開
  * 5分前に投稿完了！セーフ！
### 投稿後追加
投稿後の修正は許可されているとのことなので、いくつか修正を入れさせてもらいました。
* サウンドボリュームスライダーの実装
  * 定番らしいです。
  * タイトル画面のUIごと変更（どこかしらクリックすると始まってしまうので）
* ポスト（ツイート）機能実装
  * リザルト画面のUIごと変更（どこかしらクリックするとタイトルに戻るので）
* 画像周りの細かい修正

## 振り返り
### 良かった点（気づいたこと）
* 育児しながらの初参加でも、ゲームとして完成して間に合わせることができた
  * 間に合うか半信半疑だったので、量産まで含めて間に合ったのは良かった。
  * 少しブラッシュアップすればAndroidアプリ等でリリースできるぐらいになっていたと思う。
* 妻（デザイナー）がUnity作業に慣れていたため、効率良く進められた
  * 開始翌日には動くものを用意してくれた。
    * 組み込むための仮画像作成を先にやってもらった（特に動きの出るところは優先）
  * プログラマに負担の少ないアニメーション（トランジション周り）をつけられる
    * 結果的にプログラマが後半自由になり、雑多な作業をひたすらこなすことができた。
* アセット(OSS)を積極的に採用する感覚を少し掴めた。
  * どうしても仕事だと採用に慎重になるが、GameJamではその場で動くかどうか（とライセンス）が大事。
  * ランキングやツイート機能を30分かからずに実装できている
* プレイしてもらって感想のコメントまでいただいた
  * 反応がいただけるとやっぱり嬉しい
* タスクリストを作って作業抜けをなくせた
  * 抜けの防止と、全体の作業量の把握に役立った
  ![task.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223984/c91c4db7-2e4a-f564-10e1-12fccad7eac4.jpeg)
### 悪かった点（改善すべきこと）
* もうすこし事前準備が可能だった
  * CSVリーダーや、ボタン押下、シーケンス遷移系の処理等、決まりきった処理は割と多い。
    * 特に期間が短いので、シーケンスはTitle→Game→Resultとなる可能性が高い
  * UnityRoomの設定を熟読していなかったのも反省点
    * 「WebGLアップロード」のページにProject設定周りの記述あり。
  * なんなら企画案もある程度持っておいても良かったかもしれない
  * サウンドも時間がかかったので何か準備ができないか考えたい
* やや私生活に影響を出している
  * 睡眠削ったり、休暇取得したりしなければ間に合わなかった
* 技術的な挑戦はあまりできていない
  * 時間との挑戦ではあったが、技術的にはかなり無難
  * 作品として完成させるよりも、テーマ（シェーダー触るとか）を決めて挑戦するもありかもしれない
# まとめ
* 育児しながらでもゲームは作れる
  * 泊まり込みのゲームジャムは流石に厳しいので、1週間ゲームジャムはちょうど良かった。
* 準備はしっかりする必要があった
  * 1週間はそれほど長くない。
  * 作業メンバーが二人なので、サウンドやリリース作業等で中断させられるのを考慮に入れる。
* 作ることによって得るものがある（ので初めての人も参加してみよう）
  * 今回は完成できましたが、途中までだったとしても挑戦によって得るものはあるでしょう。
  * ユーザーの生の反応がもらえるのもとても良い点。
* 子供が喜んでくれるとなお嬉しい
  * 他の子持ちエンジニアさんみたいに、子供のためにゲームを作るようになるかもしれない。