Unityを初めて触って1週間でゲームを作って学祭で展示した話
📅 2024-11-11 | 📝 あゆたそ
はじめに
本記事では、学園祭用に開発した3Dパズルゲーム「THE-D1CE」と、そのオンラインランキングを支えるWebサーバー「xi-server-python」の開発過程を振り返ります。どちらも大学祭の開催に合わせ、1週間ほどの短期間で作り上げたプロジェクトです。時間が無いけどゲーム作りたい方の参考になれば幸いです。
プロジェクト概要
THE-D1CE とは
THE-D1CE は Unity (C#) を使って開発した3Dアクションパズルゲームです。舞台はサイコロの出目を揃えて、次々と湧いてくるサイコロを消していく盤面パズルで、プレイヤー自身がサイコロの上に乗って転がすのが特徴的な操作方法になっています。学園祭の展示企画として「短期間でもしっかり遊べるゲームを作りたい」というモチベーションで開発しました。
企画のコンセプト
- サイコロを転がす楽しさ&ランダム性を活かしたパズル
- 1週間という制約のなかで完成させる短期集中開発
- 学園祭来場者が競えるように“ランキング機能”を搭載
- ブラウザでも手軽に遊べるUnity WebGLビルドを用意
xi-server-python とは
xi-server-python は、THE-D1CE のオンラインランキングやWebデモ配信を実現するために作ったFastAPIベースのWebサーバーです。ゲーム終了時にプレイヤー名とスコアをPOSTし、サーバー側でスコアを保存・リーダーボードとしてWeb上に公開します。また、UnityのWebGLビルドを静的ファイルとしてホスティングしているため、学園祭会場以外の場所でもブラウザからゲームを体験できる仕組みを提供します。 学園祭直前にVPSへデプロイし、イベント期間中はリアルタイムでスコアを更新していました。サーバー構築・運用も含めて短期かつスピード重視で開発しています。
開発のタイムライン
1. ゲームのプロトタイプ立ち上げ (10月16日~18日)
-
10月16日
- Unityプロジェクトを新規作成し、サイコロのテクスチャや基本モデルを導入
- Gitリポジトリでバージョン管理を開始
-
10月17日~18日
- サイコロを転がす基本操作を実装
- サイコロ上面を揃えたときに消去するメインギミックを作り込み
- 効果音やカメラ演出などを追加し、見た目と操作感を調整
- スタート画面・リザルト画面を用意し、プレイの流れを大まかに完成
ここまでの作業で “遊べる形” のプロトタイプができあがりました。盤面を埋め尽くすサイコロを消去し続けることでスコアが加算され、やり込み要素が生まれます。ただしまだオンライン要素はなく、スコアはローカルに記録されるのみでした。
2. サーバー側の基盤づくり (10月中旬)
- サーバープロジェクトの初期化
- FastAPIの雛形を作成し、Dockerで簡単にデプロイできるよう設定
- Pythonではサーバーサイドのテンプレートエンジン(Jinja2)を導入し、ランキングページの雛形を用意
- ローカルでの動作確認とコンテナ起動テスト
ここまでで、最低限のHTTPルートとテンプレート描画が完成。まだスコア投稿は受け付けられませんが、学園祭用のWebサイト下地が整いました。
3. オンラインランキング機能の実装 (10月19日)
-
ゲーム側( Unity )
- “名前”と“スコア”をPOSTするメソッドを追加
- UnityWebRequest / HttpClient を使用してJSONかURLエンコード形式でサーバーへ送信
-
サーバー側( Python/FastAPI )
/score
のPOSTエンドポイントを新設- 受け取ったスコアとプレイヤー名をSQLiteへ保存
- ランキング順に並べた結果をテンプレートに反映してHTMLを返却
この実装によりオンラインリーダーボードが機能し始め、ローカル環境で連携テストが完了。ここがプロジェクトにおける大きな転換点となり、「学園祭で得点を競う」仕組みが動き出しました。
4. 学園祭直前の最終調整 (10月20日~21日)
-
UIの磨き込み
- フォントサイズ・色味・スコア表示アニメーションを細かく調整
- キャラクターモデルやサイコロのサイズ・配置条件を微変更して遊びやすさを向上
- ゲームオーバー画面にQRコードを表示し、ランキングやWebデモURLへ誘導
-
WebGL版の統合
- UnityでWebGLビルドをエクスポートし、
xi-server-python
の静的ファイルとして配置 - サーバー側で
/webgl
等のルートを用意してブラウザからプレイ可能に - systemdサービスを設定し、VPSで24時間稼働するよう準備
- UnityでWebGLビルドをエクスポートし、
-
軽微なバグ修正・Timezone設定
- リーダーボードの時刻表示を日本時間に統一
- スコア投稿時のエンコード・デコード不具合を修正
- 「1」のサイコロの特別ルールやコンボ判定など細部を調整
これらをすべて終えた時点で、学園祭に出展できる完成度となりました。10月21日以降は大きな追加機能はなく、安定稼働を優先させました。
5. 学園祭での公開・その後
-
学園祭当日
- ブースにPCを設置し、大画面ディスプレイでTHE-D1CEをプレイ可能に
- 来場者がゲームを遊ぶたびにスコアがサーバーへ送られ、ランキングが更新
- ログによると177回程度プレイしてもらえていたようです
- 大きなトラブルやサーバーダウンはなく、イベントは盛況のうちに終了
-
祭り後は軽微なメンテナンスとドキュメント更新のみ
- リポジトリ上ではバグ修正などの大きなコミットはなし
- READMEやGit LFSの設定を見直し、今後のアーカイブ用に整備
- イベント用途のプロジェクトだったため、長期的なアップデートは行わず完成扱いに
開発のポイント・工夫
1. 短期集中開発における要点
1週間というタイトなスケジュールのため、「早期に動くプロトタイプを作る」ことを最優先にしました。ゲーム側はまずコアシステム(サイコロを転がす・消す)を実装し、最低限の“遊べる形”を確保。その後プレイテストを繰り返し、ルールやUIをブラッシュアップ。サーバー側も最初はHello Worldレベルでとにかく環境を構築し、ランキング機能が必要になったタイミングで一気に実装を進めています。
2. クライアント・サーバー連携の効率化
ゲームとサーバーを同一開発者が担当したため、API仕様のすり合わせがスムーズでした。仕様書や設計ドキュメントを詳しく作らなくても、自分でUnityとFastAPI双方を調整できるため、「送るデータの形式」「レスポンスのタイミング」などをその場で決めて即実装が可能です。
3. WebGLビルドでの展示効果
UnityのWebGLビルドは会場PCで動かすだけでなく、サーバーにアップロードすれば来場者各自のスマホやPCからもアクセス可能になります。リーダーボードと組み合わせることで、「自宅で遊んだスコアも学園祭のランキングに反映できる」という使い方ができ、学園祭終了後も引き続き楽しんでもらうことができました。
4. Docker・systemd を使った素早い本番運用
本番サーバーにはVPSを用意し、Dockerコンテナ + systemdでサービスを管理するようにしました。短期開発だと、インフラ構築に工数を割きすぎると肝心のゲーム開発が疎かになりがちですが、Docker化しておくと再現性が高く、学園祭本番前に何度もデプロイテストが行いやすいです。systemdで自動再起動を設定しておけば、万一停止してもすぐ復旧します。
まとめと今後の展望
わずか1週間で、Unity製3DゲームとPython製Webサーバーを連携させ、学園祭の展示に間に合わせるというチャレンジングなプロジェクトでした。最終的に、会場で多くの人に遊んでもらい、スコアを競って盛り上がることができました。
-
成功のポイント
- コア機能を早期に固めてからUIや細部を詰める
- クライアント・サーバー両方を同じ開発者が兼任し、コミュニケーションを最小化
- Docker + systemd による手軽な本番運用
- QRコードやWebGL版を活用して宣伝効果・アクセスのしやすさを向上
-
今後の課題
- スコアデータやユーザー管理を拡張するには、本格的なDB設計が必要になる
- ゲームバランスの調整が不十分
- シングルコントリビューターで開発を回してきたため、開発にかかるドキュメント等はあまり整備されていない
今回のプロジェクトは、大学祭という明確な締切に合わせて短期集中で“動くもの”を完成させる大切さを再認識させてくれました。もし同様の展示やイベント出展を検討している方がいれば、Unity + FastAPI + Dockerといった軽量な技術スタックはとても相性が良いので、ぜひ参考にしてみてください。
以上が、THE-D1CEとxi-server-python開発の振り返りでした。最後までお読みいただきありがとうございました!