PhotoSpark

https://github.com/uyuki234/2511-58hack

Python

C#

Unity

写真を撮れば、弾幕ゲーができる

uyuki

後藤唯吹

推しアイデア

いつでも遊びたくなる弾幕ゲー! いい感じの物や人を撮って、弾幕にしちゃおう

作った背景

花火を自由に作ってみたかった。それを避けたら面白そう!

推し技術

弾幕をGPUに記述することで、動作を軽くした。 アセンブリを分割! Pyhonの機械学習を使って、写真から弾幕のデータを生成!

プロジェクト詳細

お手軽フォト弾幕ゲーム

🎮 プロジェクト概要

ジャンル:避けゲー(弾幕) 対応プラットフォーム:web(Unity) 開発環境:Unity + Python(FastAPI)+ C#


🔥 見どころポイント

  • 圧倒的スパーク!!!!!
  • 写真の撮り方次第で、いろいろな楽しみ方ができる
  • 多種多様な弾幕

🚀 技術チャレンジ & 強み

弾幕はオブジェクトを使っていない!

大量の弾幕にはオブジェクトを使っていない! GPU側で座標計算・描画を行う設計により、CPU負荷を最小化し、パフォーマンスを大幅に改善しました。

この弾幕と

image

この、激ヤバ弾幕

image

どちらも計算のみで描画しているので、ゲームが重くなりにくい!!

工夫ポイント

  • Compute Shader / GPU Instancing を活用し、弾の位置更新をGPUで並列処理。
  • DrawMeshInstanced により、同一メッシュを大量に描画してもオーバーヘッドを抑制。
  • オブジェクト数を極限まで減らすことで、GCやUpdate負荷を回避。

メリット

  • 軽量化:CPU負荷を削減し、WebGLでも快適に動作。
  • スケーラブル:弾数を増やしてもパフォーマンスが安定。
  • メモリ効率:オブジェクト生成・破棄をほぼゼロに。

アセンブリを分割

Assembly Definition Files(asmdef) を活用してアセンブリを分割しました。

image image 引用:Unity Assembly Definition 完全に理解した.https://qiita.com/toRisouP/items/d206af3029c7d80326ed .(アクセス日2025/11/23)

これにより、以下のメリットを実現!

  • 依存関係の明確化:ゲームロジック、UI、ネットワーク、SDKなどを独立したアセンブリに分離し、モジュール間の責務を明確化
  • 疎結合設計:API通信部分などをゲーム本体から切り離し、将来的な機能追加や差し替えが容易になった

撮影した画像を点群のデータに変換

スマホのカメラで顔や物体を撮影し、機械学習モデルを使って画像から点群データを抽出できます。 この点群データをUnityに渡し、弾幕のパターン生成に利用することで、撮影した対象がゲーム内の攻撃パターンに変わります。

image image

技術ポイント

  • MediaPipeやOpenCVで画像から特徴点を抽出(顔のランドマークや物体の輪郭)。
  • 点群データ(座標群)をJSONやWebSocketでUnityに送信。
  • Unity側で座標をもとに弾幕を生成(例:顔の輪郭に沿って弾を発射)。

メリット

  • インタラクティブ性:撮影したものが即ゲームに反映される。
  • 機械学習の応用:画像認識をゲーム演出に活用。
  • 拡張性:顔だけでなく、物体やポーズにも対応可能。

✨ その他の技術

  • GithubはCopilotによる自動レビューの仕組みを作り、PRの質をあげた

workflowとして、自動でCopilotがレビューしてくれる image

レビュー例: image


⚠️ 困ったこと

  • Unityでコンフリ地獄 → 気合い
  • エラーと判定されないエラー(成功した値と似ている)の判別、修正が大変 → バックエンドの仕組みを、AIを活用しつつ理解して解決
  • APIのやり取りが大変だった → C#とPythonのfloat型の互換性を確認。うまく通信できるようにした
  • githubの容量制限 → 容量の大きいファイルをgitignoreしてpush(メンターさんありがとうございます!)

✅ 学びと感想

  • 全員が大学一年生のチームで、完成できるか不安だったけれども、ゲームを完成させることができた!
  • 事前に用件定義を詳細まで行ったため、開発期間は開発に集中することができた。
  • それぞれの得意分野をもとに役割分担したことで、効率よく開発できたと思います。

🛠 使用技術

  • Unity
  • Python
  • FastAPI
  • C#
  • Render
  • MediaPipe

uyuki

@uyuki234