Unity1週間ゲームジャムに間に合わなかった話

# はじめに

Unity1週間ゲームジャム(#unity1week)に間に合いませんでした。
Webにはいっぱい「ゲームジャムうまくいった話」がありますが、自分のように玉砕した人間の話はあまり見ません。
ということで、今回失敗したところや、実際の作業のタイムテーブルをまとめて、間に合う人が増えるように記録を残しておこうと思います。

# 作ったもの

間に合わなかったものの投稿・参加自体は出来たので、こちらで公開してあります。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/113293/b71abd2a-58bc-f0eb-56a9-214084ad6a74.png)
https://unityroom.com/games/piyotter

Twitter風のSNSで、フォローし返してもらってフォロワーを増やすゲームです。

https://github.com/Piorimu/FollowBackGame
ソースもGitHubで公開しておきました。
バージョンは「Unity 2018.3.6f1」です。

#なぜ間に合わなかったのか

* クラス設計のために、仕様を決めるのが予想以上に時間がかかった
* 触ったことの無いUniRxとTextMeshProを取り入れたこと

最後に実作業のタイムテーブルを載せますが、上記で時間がかかった印象です。

実は、企画を決めたのが3/15の深夜、実装作業を始めたのは翌16日と実質2日間しか使えませんでした。
が、企画の時点で「2人日で間に合う」と踏んで作業し始めたので、「開始時期が遅いこと」や「徹夜しなかったこと」は今回は言及しません…。

## クラス設計

金曜日に企画を決めて「Twitter風のUI作って、フォローバックのシステム作る」だけなら2人日もあれば「いける」と思い、作業を開始しました。

グローバルゲームジャムでクラス設計をやったらスムーズに開発が進んだ話
https://qiita.com/toRisouP/items/824aff814849ae41efe7

そして、こちらの記事を参考に自分もクラス設計をしてから、実装を始めることにしました。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/113293/96055e94-f896-2b56-feee-2a819d49faae.png)


クラス設計は2時間で作る想定でしたが、5時間半かかってしまいました。
更に、時間が無くなるにつれ、この図を見返すこと無くなっていき、この図には無いクラスが生まれたり、図にはあるけど実装することは無いクラスが大量に発生しました。
クラス設計の目的はあくまで「全体像の把握」「多人数開発における事故の防止」であって「個人開発の工数を減らす」ものでは無いことを思い知りました。

### 仕様決め…要件定義

クラス設計に費やした5時間半の内、3時間半は仕様決めをしていました。

* 「フォローしたあとどういう処理をもってフォローバックするのか」
* 「アカウントのアイコンは、画像生成か、テクスチャ配列からランダムで選択するのか」
* 「イベント（実装を断念した要素）の判定に必要なパラメータは何か」

などなど、クラス設計に当たって必要な仕様をすべて決める必要がありました。
仕様は「面白いか」や「破綻していないか」、「作るのに時間がかからないか」など考えながら決めていきました。
今まで、個人制作では迷ったら「作りながら決める」ことが多かったので、この「作る前に仕様を決めること」のスケジュール感がいまいちでした。

また「面白いか」と「作るのに時間がかからないか」で悩むことも多かったです。
この2つの要素は基本的に相反しているので、同時に考えると時間がかかります。
ここで時間をかけないためには、

* 面白い既存のゲームを真似る
* 作れるものだけ作って、面白さは捨てる

と言ったアプローチが考えられます。あんまり耳障りはよくないですが…。

## UniRx

主にUI周りで使いました。
eventと同じ感覚で使おうとしましたが、書き方を理解するのに時間がかかりました。

どんな感じで使ったのかは、この辺りのソースを見て頂ければと思います。
https://github.com/Piorimu/FollowBackGame/blob/master/FollowBackGame/Assets/Script/GUI/GameMain/Panels/Panel_Account.cs
https://github.com/Piorimu/FollowBackGame/blob/master/FollowBackGame/Assets/Script/Scene/GameMain/States/State_WaitFollow.cs

まだまだ、UniRxの真髄に触れていない気がする（大体eventで置換出来る）ので、ご指摘ご指南頂ければと思います。

## TextMeshPro

こちらはテキストすべてに使いました。
日本語網羅テクスチャを作るのにいろいろパラメータを変えて試していたら、結構時間を使ってしまいました…。
4096四方で作りましたが、ビルドに6分ぐらいかかります。

# 実作業タイムテーブル

どこで時間がかかったのか分かるように、いつどういう作業をしていたのかメモをしていましたので、そのまま貼っておきます。
実作業時間は27時間10分。土曜日から寝なければ間に合った計算ですね。

### 3/15(金) 作業時間:1h
2300-2400
企画出し
ブレスト→絞り込み

### 3/16(土) 作業時間:10h40m
1100-1300
やることリストアップ
1330-1500
ゲーム要素書き出し
1500-1630
クラス設計
    ロジック→関数→SOLID意識してクラス化
1700-1820
TextMeshPro検証
1940-2100
抽選システム（動画見ながら）
2100-0000
フォローループに必要なUI完成

### 3/17(日) 作業時間:11h45m
1100-1300
モーダルシステム作成
フォローボタンの動き作成
1445-1600
ステートシステム構築
1600-1700
フォローボタン設定
アカウント作成システム
フォローループの見た目だけ完成
1700-1745
やる気、プレイヤーフォローのリンク作成
1745-1915
タイトル→ゲーム遷移が出来る（名前はまだ）
1915-1945
権利表記完成
タイトル→ゲーム遷移ができる（名前もいける）
1945-2015
ヌルリファ修正…Subscribeがシーンをまたぐとダメで、StartCoroutineにしたら治った
2015-2100
ゲームオーバー→タイトル作成
ゲームループ完成
2100-2200
FF率でフォロバ確率判定を行うように
　ゲームっぽくなる
　　ゲームオーバーを回避出来る
　　考える
2200-2230
FF率とやる気の調整
2230-2300
FF率表示
　プレイしやすくなった
2300-2340
ハイスコア実装
　ネームエントリが二重になってしまった…。
2340-0030
イベントクラス作成だけ

### 3/18(月) 作業時間:1h45m
2100-2115
なぜかGameMainシーンの参照が外れていたので治す
2130-2200
名前生成
疑似個人情報データ生成サービス
https://hogehoge.tk/personal/
それっぽい名前ジェネレータ
http://tinyangel.jog.client.jp/Name/NameGenerator.html
Fantasy Name Generator
http://www.rinkworks.com/namegen/
2300-0000
イベントモーダルの動き作成

### 3/19(火) 作業時間:30m
2330-0000
イベントを廃止、やる気上昇量を見えるように
効果音集め

### 3/20(水) 作業時間:1h30m
2230-2330
効果音実装
2330-0000
アイコンプロバイダー実装・アイコンの色を変えられるように
～公開～

# まとめ

腕試し感覚で参加しましたが、見事に玉砕しました。
特にクラス設計のメリットに目が眩んで、個人開発では費用対効果が少ないのに、手を出してしまったところは反省です。
「成功体験談」を読むと「自分もそうなりたい！」と安易に真似しちゃうのは、ダメですね…。
この記事を世に晒すことで、自分を戒めたいと思います。