効率的なゲームジャムの手引き（GGJ2019版）

ジャムおじさん（老害）の1人として、会場運営したり、若い人と一緒に開発したりしてますが、割と若い人が無頓着に見えるのが、チームの開発スタイルです。
ちょっとしたことを最初に誰かがやるだけで、開発スピードが大きく変わると思うので、その辺のことを書いておきます。

# メッセージアプリ

会場でみんなで作業している時に、ちょっとしたファイル共有が欲しくなることは多いですし、解散して一旦帰宅した後に、連絡を回すこともあります。そうした場合に、全員で共有できる状態のメッセージは便利です。

若い人はLineを第1選択に考えるかも知れませんが、

- 全てのメンバが、スマホでもノートPCでも両方で同じアカウントで使える
- ファイルを添付できる

の2点を満たすように決めると良いでしょう。全てのメンバが、ノートPCでもLineを使えていれば、Lineでも良いかなと思います。

会場によっては、参加者でFacebookグループを作るところもあるので、その場合は、Facebookにするのが良いかなと思います。

メッセージアプリのアカウントは、個人情報と強く結び付いた設計のものが多いので、初めて会う人と繋がることに抵抗があるメンバもいると思いますので、その点にも配慮して相談してください。

# Google Documents

メッセージアプリの投稿が多くなると、必要な情報が流れて行ってしまうので、そのバックアップの意味も含め、誰か1人がGoogle Documentsを1枚作成して、リンクを共有し、みんなで書き込めるようにしておくと便利です。
特に、相談して確定した仕様のリストなど、模造紙で貼り出しておきたいような情報をネット上で共有する場合、便利だと思います。

企画発表用のスライドを作る場合にも、同じようにGoogle Slidesを共有すれば、何人かで分担執筆できるので、時間を有効活用できるでしょう。

# Unity Teams

Unityでゲームジャムやる場合、プロジェクトの共有のために、Collaborateを使うのがオススメです。
メンバのスキル的に問題なければ、Gitを併用しても良いのですが、ブランチをどう切るかなどをリードできる人がいないなら、Collaborateが良いと思います。

Collaborateを使うためには、Unity Teamsで、まずチームを作る必要があります。この時、無料版のUnity Teams Basicではなく、Unity Teams Advancedでチームを作成してください。
クレジットカードの登録が必要になりますが、30日間は、メンバの追加も含め、無料で使えます。
ゲームジャムのチームがBasicでまかなえる3人以下になることは、あまりないと思いますし、ゲームジャムのプロジェクトなので、30日間使えれば十分でしょう。
Unity Teams Advancedでチームを作成し、人数に合わせてシートを追加し、メンバ登録とシート割り当てを行ってください。
また、支払いに関する初期設定が、30日後に自動で支払いが開始される設定になっているので、支払わない設定に変更しておきましょう。こうすることで、30日後に、シート割り当てがリセットされ、自動でプランがBasicに変更されます。
メンバの権限については、クレジットカードを登録してチームを作った人のみオーナーとするのが良いでしょう。別の人もオーナーにしてしまうと、登録したカードによる支払い権限を共有することになってしまいます。

# Unity Collaborate

Collaborateでプロジェクトを共有すれば、Unity上のボタンを押すだけで、各自の環境を同期させることができます。
しかし、Gitなどのリポジトリとは異なり、ブランチを切れないので、別バージョンを並行して開発してからマージするという開発プロセスは使えません。
また、同期の際にコンフリクトがあると、Unityに登録されたマージ用の外部ツールに解決させようとするのですが、デフォルトで有効なツールの設定がないため、解決できません。
つまり、上がっているモノか、手元のモノか、どっちかを消すことになります。
こうしたCollaborateの制約を念頭に置くと、

- 同時に同じシーンが編集されるとコンフリクトするので、マルチシーン編集を用いて、論理的に1つのシーンを、各作業者がそれぞれ作業する複数のシーンファイルで構成する
- シーンファイル以外のリソース（例えばスクリプト）を編集する際には、「Unpublished changes」のアイコンが付いていないか確認し、先に作業している人の未共有の成果に配慮する
- 別バージョンの並行開発、新バージョンの先行開発のため、コンフリクトを気にしないで作業したい場合は、プロジェクト内でシーンファイルその他の必要なリソースをコピーして作業し、あとでマージを考える

といったような開発プロセスを採用することになります。
とにかく、こまめな同期が、問題の発生を防いでくれるので、コミットコメントを悩む前に、コメントなしでuploadするのが良いです。
ガシガシ、作業を続けていくと、プロジェクトの中身が発散していく、とっ散らかっていくので、ゲームジャムの後半は、意識的に、各自の成果物をマージしていく気持ちが大事です。

年末から正月ごろの話ですが、Collaborateをあるプロジェクトで使っていて、特定のシーンファイルが、変更していないのに更新されたと判定され、upload対象になる現象が出ていました。そのシーンファイルを別名保存して、プロジェクトから無くなった状態にしてから、名前を戻すなどしたところ、現象は出なくなりました。もし同じ現象に悩まされたら、参考までに。

# Unity Cloud Build

Unity Teams Advancedでチームを作ると、Cloud Buildも使えるようになります。簡単な設定で、Android向けのビルドができるので、手軽にスマホ向け開発を行うことができます。
Collaborateの更新をトリガに自動ビルド設定もできるのですが、こまめに更新をかけると、本当にビルドしたいタイミングで、前のビルドが走っていて、すぐにビルドできないことがあるので、手動でボタンを押してビルドするのがオススメです。

マルチシーン編集した場合、実行時に複数のシーンをAdditiveでLoadScene()すると思いますが、Windowsのビルドは問題なかったのですが、AndroidのビルドでAdditiveなシーンが読み込まれない現象がありました。しょうがないので、1つのシーンにまとめてビルドしました。もし同じ現象に悩まされたら、参考までに。

# itch.io

GGJのサイト運営や提出レギュレーションはそんなに安定していないので、成果物公開場所のバックアップとして[itch.io](https://itch.io/)がオススメです。
itch.ioには、ゲームジャムのホスト機能があるため、多くのゲームジャムで利用されており、各種ゲームジャムに参加するのであれば、アカウントは持っていて損はないでしょう。

# Bitbucket

ゲームジャムが終わった後に、成果物をGitなどのリポジトリに上げておくことで、継続開発や派生開発が行いやすくなります。
Collaborate上でも、コミットメッセージで「これが何とかバージョンですよ」みたいに残しておけますが、検索ができないので、何十ページもめくりながら目当てのコミットを探すことになるので、複数のバージョンを管理するのには向いていません。

では、どこのリポジトリを使うかですが、4人以上でもプライベートリポジトリをいくつでも無料で作れる[Bitbucket](https://bitbucket.org/)をオススメします。
GitHubもプライベートリポジトリ作り放題になりましたが、3人までしかメンバを入れられないので、ちょっと使いにくいかなと思います。

最終的にパブリックリポジトリとして公開することを考えるかも知れませんが、アセットストアなど外部からプロジェクトに加えたアセットがある場合、ライセンスによっては、それらを取り除かないと公開できないことが多いです。
つまり、リポジトリにある状態でビルドできないことになります。
ゲームジャム中に使用する場合は、不便で仕方がないと思うので、プライベートリポジトリを使って、必要ならgitignoreを調整して、ビルド可能な状態のリポジトリを作りましょう。

# さいごに

ここに書いた事項についてチーム内で合意し、実際に使い始めるところまでを、金曜日の夜中（もしくは、金曜日の夜に一旦解散する時）までに出来ていれば、土日の開発を快適に進められるでしょう。
各メンバの作業が本格化する前、企画を相談した後に、企画担当が仕様をまとめることになると思いますが、そこで待ち時間が出るメンバで、手分けして準備できると良いでしょう。

また、遅くとも土曜日の夕方には、中途半端な状態でも良いので、実行可能な配布形式を作ってみましょう。
他にも、最終提出レギュレーションを確認して、提出物を試しに作ってみましょう。
締め切りまでに行う可能性のある作業は全て、それをやってみるのが可能になった時点で、なるべく早めに試しておくべきです。
締め切り直前に、初めてやる作業は、本当によく失敗します。

では、良い週末を！