kugi's notebook

やったこと、思ったことなどつらつらと書きます

unity1weekにチームで参戦するために2monthかけて準備した話

はじめに

こちらの記事は Unityゲーム開発者ギルド Advent Calendar 2020の11日目です。

(本日アドベントカレンダー2回目笑)

私はUnityゲーム開発者ギルド(通称: UGDG)に2ヶ月ほど前に参加しました。

ギルドに参加したことで今まで以上にUnityに触れる機会が多くなり、メンバーの方から刺激もたくさんいただいています。また、気軽に話しかけてくださる方が多く、コメントにスタンプで反応してくださったり、とても暖かいコミュニティだと感じています。また一緒にゲームしたりDiscordで雑談したりすることも増え、いいことづくしです!

UGDGのアドカレなので、この記事では「unity1weekにチームで参戦するために2monthかけて準備した話」について書きたいと思います。

チームaojilu

f:id:kugi_masa:20201210211427p:plain
チームaojilu

チームaojiluは同じ大学のaojiluくん、SilCilさんと私の3人からなるチームです。

aojiluくんのツイートがきっかけで集まりました。

f:id:kugi_masa:20201210202359p:plain
3人集まるきっかけとなったaojiluくんのツイート

aojiluくんとSilCilさんはGSD(大学のゲーム制作同好会)に所属していて、aojiluくんは私がメンターをしていたときのenPiT2019で一緒、SilCilさんはu1wでTwitterのFFという関係性でした。

初日はZoomで3人で顔合わせをしました。 Zoom無料プランの40分制限があったので、40×4回笑笑。「第4回ミーティングよろしくお願いします〜」と回を重ねるごとに初日で3人の心理的距離は縮まりました。

それ以降は主に以下のツールを使ってミーティングをしていきました。

  • Discord: 通話用
  • Miro: アイディアボックス(オンラインホワイトボード)
  • UDGDのScrapbox: 議事録とギルドへの知見共有
  • GitHub: コード共有、タスク管理
  • Slack: チームチャンネルでわいわい🙌

私たちは3人ともプログラマなので、ゲーム制作におけるプログラマ分業という修羅の道への旅が始まろうとしていました...。

unity1monthやってみる

一緒にチームで開発したことのない3人でいきなりu1w挑戦となるときっと大変だ!!と思ったので、まずは1weekを1monthにのばして3人でアイディア出しからゲームを作るところまでやってみることにしました。お題をTwitterで募集したところ、「重力」というお題をいただきました。 ひとまず次のミーティングまでに各々考えて、アイディアを持ち寄ることに...

f:id:kugi_masa:20201210203245p:plain
お題をTwitterで募集

aojiluくんとSilCilさんはこれまでGitHubあまり使ってこなかったとのことだったので、Miro & GitHubハンズオンを行いました。 その後、いただいたお題「重力」を元に持ち寄ったアイディアを深堀していく形で作るゲームの企画を固めていきました。

f:id:kugi_masa:20201210202720p:plain
アイディア出し

画像からもわかるようにMiroでわいわい絵や図を書いたりして盛り上がりました。 しかし、企画を決めるにあたって何を軸に決めたらいいかわからず、アイディアが分散してしまいかなり時間がかかってしまいました。 (アイディア出し自体はわいわいできてとてもよかったと思っています)

最終的に、「迷わずに答えられる面白さ」がはっきりしている企画、3人が話し合ってこのゲームの「面白さ」はここだよね、と言えるものを軸に考えることにしました。

f:id:kugi_masa:20201210204054p:plain
迷わずに答えられる面白さ

そうして決まったのが

「アイテムを集めながら星から星を飛んで移動しゴールの星を目指すゲーム」

Gravity Planet

です。

github.com

結論から先にお話しすると、このGravity Planetは最終的にゲームにはなりましたが、unityroomにリリースするまでには到達できませんでした。

ここでは最終的に出来上がったものと、取り組み方や反省点などを、unity1monthが終わったタイミングに戻った気持ちでKPT(KEEP・PROBLEM・TRY)で振り返りたいと思います。 (現在の振り返りではありません)

KEEP

  • モブプロベースで進めることで知見の共有ができた(Cinemachineはじめて使ってみた!!)
  • ミーティング中に疑問点や進め方にモヤッと感じたタイミングで疑問点の解消、モヤッとをすっきりにもっていく合意タイムが取れてよかった(aojiluくんモヤッと報告ナイスでした👍)
  • CloudBuildでビルドコストをなくせた
  • メンバー間の心理的距離が縮まった

PROBLEM

  • コーディング規約が曖昧で設計、依存関係が大変なことに...
  • 企画決めに決まった流れが欲しい
  • 今の感じだと1monthでも厳しかったので、1weekもつらいことになりそう...
  • Issueでタスク管理はコストの割に旨味がない(u1wだと特に)

TRY

  • 設計の指標がほしい(TRYか...??🤔)
  • Gravity Planetの設計を見直す会をしたい
  • 企画決めの流れを作りたい
  • 1週間をという期間を踏まえてもう一度企画からやってみたい

SilCilSystem導入

さて、Gravity Planetの振り返りが終わりTRYでも出た「設計を見直す会」をやりました。

SilCilさんが用意したクラス図をもとにSilCil'sオススメ設計を教えていただきました。

私たち3人の中では明らかにSilCilさんが設計マスターです。

f:id:kugi_masa:20201210213558j:plain
設計の話をしよう

それから何回かミーティングを重ね、SilCilさん主導で設計の指標となるテンプレートリポジトリ(Unityプロジェクトのテンプレート)SilCilSystemを作ることになりました。

なんとSilCilさんお手製のドキュメントもあります!!!!

u1w以降、落ち着いたタイミングでSilCilさんの方からもSilCilSystemの振り返りブログを書くとお聞きしているので詳しい内容はこちらでは割愛します。 (というより、私は説明しきる自信がありません...😂)

aojiluくんと私はというと、このテンプレートリポジトリを使って実際にゲームを作ってみて使い方に慣れようとしています。

実は別のイベント(LT駆動開発。発表はMomijiLT#3にて。12/13(日)18:30〜です。YouTubeLiveにて配信します)で作って昨日しれっとunityroomにアップしたこちらのゲームもこのSilCilSystemをテンプレートにして作ったものです✨

チームaojiluにおける理想的な一週間の流れ

そしてSilCilSystem制作と同時並行で残りのTRYである「企画決めの流れづくり」「一週間を踏まえてu1wの素振り」に取り組んでいます。

まずは理想の1weekの流れについて話しました。

f:id:kugi_masa:20201210220452j:plain
チームaojiluにおける理想的なu1w

unity1monthでは、CloudBuildを使うことで、main(master)ブランチにマージされたタイミングでビルドが走りDiscordのCloudBuild用のチャンネルにビルドがアップされるようしたので、u1w本番でも同じようにするのが望ましいです。

f:id:kugi_masa:20201210221530j:plain
CloudBuildはいいぞぉ

しかし、それぞれ一週間ずっとつきっきりというわけにもいきません。 一週間の流れの画像にもあるように、チームaojiluでは毎日夜集まり以下の流れでu1wに取り組むことにしました。

  1. お題が出てから初日のミーティングまでにお互いアイディアを持ち寄る
  2. 初日のミーティングで企画を決め切りやるべきタスクを洗い出す
  3. 初日以降はそのタイミングでの最新のビルドを遊んでどうゲームをカイゼンしていくかを決める
  4. タスクを洗い出して次のミーティングまでコミット(コミット内容は同期が取れるようにslackで適宜共有)
  5. 最終日まで3. 4. を繰り返す

こう見てみるとなんかu1wやっていけそうな気がしますね!!!

とはなりませんよね笑

KPTPROBLEMでも出たようにunity1monthのアイディア出しでは決まった流れがなく、話が分散し時間がかかってしまいました。そこで私たち3人は理想の企画決めの流れを探るべく、ジャングルの奥へと向かいました。

企画決めの流れ

まず前回お題の「重力」をもとにそれぞれ事前にアイディア出しをし出たアイディアを共有するということをやりましたが、フォーマットがバラバラでアイディアの説明も人によって時間をとったり取らなかったりとまちまちでした。

一週間しかないu1wにおける共同開発(チーム開発)では意思決定の早さが非常に大切になります。そこで私たちは、EMS フレームワークを持ち寄ってそれを共有することにしました。 (EMSフレームワークのついては以下を参照) gamebiz.jp

そして、素振りの試行錯誤を2回繰り返し、最終的にこれならいけそう!!という流れにたどり着きました。(ジャングルの奥に宝はあった!)

f:id:kugi_masa:20201210230515j:plain
割とうまくいったアイデア出しの流れ

付箋の左の時間は実際に素振りをやってみて妥当だと見積もった時間です。

f:id:kugi_masa:20201210230544j:plain
お題「打つ」でEMSフォーマットでアイディアを書いていき、共有、選定を行った図

EMSフォーマットを導入したことでアイディアを発散収束させやすくなりました。 またオズボーンのチェックリストにならって事前に用意したEMSフォーマットからミーティングの時間で新たなEMSフォーマットを作る時間も用意しました!! jairo.co.jp

f:id:kugi_masa:20201210230524j:plain
1回目の素振り(お題は「はずす」)の振り返りをした図
この章の頭でも書いたように実は素振りは2回行いました。もともと初めに想定していた流れのもと進めていましたが、意外と早く決まり過ぎてしまいました。早く決まったけど、もやもやが残る状態だったので一度振り返りを入れ、今の流れにカイゼンされました。 (ナイスモヤッとストップaojiluくん)

このようにしてできたTETOR<I\E>VERのペライチ企画書が以下の画像になります。

f:id:kugi_masa:20201210232618p:plain
ペライチ企画書

パッとみるとあまりゲームシステムが伝わりづらい企画書ではあります。しかし、この企画書はあくまで3人の共通認識を揃えるためのものとしました。なので企画書の完成度よりは一緒に話しながらすり合わせをして企画書を作る時間に重きをおいています。

現在はu1wまでの残りの時間でこの企画書をもとに一週間の一部を切り取って(3. 4. の部分)SilCilSystemの運用練習も兼ねてTETOR<I\E>VERを制作しています。

kugiが思うこと

こうして2ヵ月を振り返ってみるといろんなカイゼンを行って来たなぁと感じます。

個人的によかったと思うのはaojiluくんがモヤッとしたときにすぐに言ってくれることです。

チーム開発の経験がある私が主にミーティングのファシリをしていたのですが、進め方に対する疑問点やモヤッとしたところをすぐに投げてくれるので、一旦手を止め(ここではミーティングの流れを止め?)3人で合意がとれるようになっていると思います。

また、SilCilさんからの学びも凄まじいです。3人のなかでUnity経験も知識も一番あるのでシステム面で引っ張っていただける分、私はチームビルディングに集中することができたと思います。

また、u1wのチーム開発で今までのチーム開発とは違うなと感じたのは、ユーザーストーリーベース([例]駒を盤面に置くことができる)でIssue(タスク)を立ててしまうとどこまで実装すればいいかわかりづらくなるという点です。このようなタスクだと「盤面はどこで用意すればいいの?」や「駒は何を置くの?Sphere?Cube?それとも...」といった疑問が生まれます。

Issue(タスク内容)を見ただけでチームみんながタスク内容を理解できるようにするにはタスクを具体的に書き出す必要があります。長期開発だと問題はなさそうですが、u1wではやはりスピードが大切。時間をかけてIssueを書いていてはゲームは完成しません。そのため、チームaojiluではIssueは雑めで、着手する人にある程度はお任せという方針でいこうと考えています。また、ユーザーストーリーベースよりはロジックベースのIssueが良さそうです。

まとめ

さて、u1wまであと一週間弱。 こうやって2monthかけて準備したことが全てうまくいくとは思いません。 むしろ、うまくいかないことの方が多いかも知れません。 良いチームが絶対良いゲーム(プロダクト)を作ることができるわけではないと思います。

ただ、この2month行ってきたカイゼンは決して無意味だとも思いません。カイゼンを重ねることで少しでも良いゲームが作れる可能性が増えるなら私は最後の最後までカイゼンを続けたいと思います。

と大きなことを言ってしまいましたが、 ゲームを評価するのはプレイをするみなさんです!

このチームaojiluからどんなゲームが生まれるか...!!unity1weekでお見逃しなく!!!

(今回は長い振り返りなのでYWTはお休み)