はじめに
私の所属するMCCというサークルでは、毎年学祭に向けてゲームを開発しています。この記事では、今年どんなものを作ったのか、どのように作ったのか紹介し、振り返りをしていきたいと思います。技術面の話はほとんどしない予定です。
Unity側の技術的な話も部員が書いてくれたので、気になる方はそちらもご覽ください。
また、リポジトリも公開されているのでぜひ。
作ったもの
今回作ったものは弾が跳ね返るマルチプレイシューティングゲームで、事前登録パートと、ゲームパートに分かれています。
事前登録パート
並んでいる間の待ち時間で事前登録をします。
- 来場者は自身のスマートフォンでWebページにアクセスします
- ニックネームを入力し、登録完了
- そのままキャラメイクに入り、好きなモデル・髪色・アクセサリ等を選びます
- 発行されたQRコードを持ってゲームへ→
ゲームパート
お菓子の世界で4対4でグミを投げ合います。チーム戦で1、最大4人までマルチプレイでき、残りのキャラはNPCとなります。
- 発行されたQRコードを画面にかざし、ゲームに入ります
- 待機ルームで所属チームを選びつつ、他のプレイヤーの参加を待ちます
- チーム確定後、カウントダウンの後シューティングに入ります
- 終了後、リザルト画面が表示されます
技術構成
ほんとうにざっくりと。
WEBサイド
- Remix
- TypeScript
- Cloudflare Pages (ホスティング)
- Supabase (Auth, データーベース)
ゲームサイド
- Unity
- C#
- Netcode for GameObjects (マルチプレイ)
- Supabase (データベース)
開発の流れ
何故これを作ったのか、誰がどのように作ったのか書きました。上手くまとまっていなくて読みづらいです。
キックオフ
学園祭2ヶ月前ほどに、ようやくメンバー募集とアイデア出しを始めました2。アイデアマンがいないのもあって時間がかかりましたが、
- マルチプレイは楽しいし、Netcodeを使ってみたい
- WEB開発詳しい人いるし、組み合わせたらタスクも分散できて良さそう
- 弾が反射するとか
のようなアイデアから制作物を決定しました。今回の作品タイトル「RicoShot」は「ricochet(跳弾)」という英単語から来ています。
また、ゲームの世界観を共有する上で
- フォールガイズのようなポップな感じ
を目指し、後にお菓子の世界ということになりました。
役割分担
おおまかに以下のように分かれていました。
-
WEBサイド: 1~3名ほど
- デザイン・設計・実装など
- コンポーネントの実装など
-
Unityサイド: 3~8名ほど
- 設計・マルチプレイの実装・主要インターフェースの実装など
- シューティング部分のプロトタイプ作成
- MLAgentを用いたNPCの作成
- 様々な機能の実装
-
Blenderサイド: 2名ほど
- キャラクターモデル・アニメーション作成
- 背景オブジェクト・ステージ作成
力のある人に丸投げしていた面も多かったですが、少しでも開発でコントリビュートした人を数えると12名もいます。去年は5名だけで作っていたので嬉しいですね。
進捗管理
毎週オフラインで集まり、共同編集ドキュメントに各自進捗を書いて報告し、次のタスク分担を相談・決定する会議を行ないました。
ただ、Unityの開発が1週間おきのタスク更新では間に合わず、本番2週間前あたりから
「GitHubのIssueに順次タスクを書いていくから誰かやって
タグのついたIssueをこなして欲しい」
という雑な形式を取ることになりました。
まとめ
今回のチーム開発で得られた知見です。一般的には目新しいものではありませんが......
- 開発は早めに始めるべき
- 週一の会議に頼らず、Discord でのリアルタイム性の高いコミュニケーションを主軸にした方が進めやすい
- 未知の技術を取り入れすぎるとタスクの割り振りや設計の見通しが立ちにくい (Netcode, MLAgent)
- デザインできる人がいると完成度が高まる。
おわりに
この記事では開発面にフォーカスしているため触れていませんでしたが、学園祭当日の接客に手伝いに来てくれた方々の協力もあり、無事に出展することができました。ありがとうございます。