成果物一覧に戻る
Webカメラ手印認識アクションゲーム2026/07〜 (開発中)個人開発

MUDRA

Webカメラに映した手の形が、そのまま魔法の詠唱になるアクションゲーム。

概要

Webカメラの前で実際に手印(ムドラー)を組むと、その手の形がそのまま術の詠唱になるアクションゲーム。コントローラーのボタンではなく、自分の手そのものが入力デバイスになる。

NARUTO や呪術廻戦で描かれる「指を組み合わせて技を発動する」あの瞬間への憧れが出発点。タイトルの「MUDRA」は、それらの文化的ルーツであるサンスクリット語で「手印」を意味する言葉そのもの。単なるオマージュではなく、その本質をゲームプレイとして体験させることを目指している。

コアループ

  1. 詠唱 — 手印を順番に組む。0.5秒ほど手の形を保持すると「印確定」の演出が入る
  2. 発動 — 詠唱を組み終えたら発動印「射」を組む。術が放たれて敵にダメージ
  3. 判断 — 敵の攻撃予告を見て、そのまま詠唱を続けるか、ガード印を挟むかを選ぶ
  4. リカバリ — 組み間違えたら解除印「散」でシーケンスをキャンセルして組み直す

詠唱と敵の行動は並行して進む。ターン制ではないため「攻撃を受けながら詠唱を押し通すか、手を止めてガードするか」というリアルタイムの判断が常に発生する。

手印システム

詠唱印(片手・5種)

印名手の形属性
壱印「開」パー(全指を開く)
弐印「握」グー(全指を閉じる)
参印「指」人差し指のみ伸ばす
肆印「刃」チョキ
伍印「掌」親指だけ折る

特殊印(片手・3種)

印名役割
発動印「射」詠唱したシーケンスを術として放つ
解除印「散」詠唱中のシーケンスを能動的にキャンセルする
防御印「守」敵の攻撃に合わせて構え、ダメージを軽減する

両手印(1種)

印名手の形属性
陸印「合」両手を合わせる(合掌)

術の入力例:

【火炎弾】 伍印「掌」→ 壱印「開」→ 発動印「射」
【雷連撃】 参印「指」→ 参印「指」→ 壱印「開」→ 発動印「射」

印の数が多いほど術は高威力になるが、そのぶん詠唱に時間がかかり被弾リスクも上がる。制限時間内に素早く組み切れば威力にボーナスがつき、間違ったまま発動印を組むと暴発して自分がダメージを受ける。

バトルの設計

属性相性だけで組むと「弱点属性の術を連打するゲーム」になってしまう。そのため術には属性のほかに、ヒット数・発生速度・副次効果(スタン / 継続ダメージ / スロウ)・詠唱コストといった個性軸を持たせ、敵の行動パターンによって最適解が変わるよう設計している。

ステージは「道中セクション → ボス戦」という構成で、セクションをまたいで HP は引き継がれる。目先の1戦だけでなく、ステージ全体を通したリソース管理が要求される。

開発プロセス

実装より先に仕様書を書き、それを拠り所にコードを書く仕様駆動開発で進めている。実装中に仕様との齟齬が出た場合はコードを仕様に合わせるのではなく、仕様書のほうを更新して生きたドキュメントとして運用する。

開発はプロトタイプ → α版 → β版とマイルストーンで区切り、各マイルストーンの終了時に開発ログを残している。ログには実装ファイル一覧だけでなく、採用しなかった案とその判断根拠、そして意図的に先送りした技術的負債を明記している。「なぜその設計にしたか」を後から追跡できる状態を保つことを重視している。

Pull Request には CodeRabbit による自動レビューを導入し、Unity 向けの path_filterspath_instructions を設定してアーキテクチャ違反を検知できるようにしている。

現在の進捗

✅ Prototype  MediaPipe接続 / 手印判定 / 1術発動の最小デモ
✅ α版        バトル成立(術発動・ダメージ計算・敵AI・ガード)
🔄 β版        全ステージ実装まで完了。演出強化・ゲームフロー・
              チュートリアル・サウンド・バランス調整を継続中

技術的こだわり

手印認識パイプライン

  • MediaPipeUnityPlugin で取得した手のランドマーク21点から、各指の曲げ角度を算出して手印を識別
  • 手印の分類はルールベースで実装。現在の印の種類数では機械学習を持ち出すコストが見合わないと判断した。ただし IHandLandmarkProvider インターフェースを挟んでいるため、将来 ONNX + Unity Inference Engine に差し替える場合もアーキテクチャの変更なしに移行できる
  • MediaPipe のコールバックはバックグラウンドスレッドで飛んでくるため、UniTask の SwitchToMainThread() を挟んで Unity API との境界を安全に処理

オクルージョンを前提にした手印デザイン

  • 単眼カメラの推定では、手と手が重なる手印は隠れた指の座標が推測で補完され誤認識が避けられない
  • そのため原作の手印をそのまま再現する方針は捨て、オクルージョンが発生しない形の中から MUDRA オリジナルの手印を設計する方針に切り替えた
  • 「技術的制約を仕様側で吸収する」判断そのものを設計として記録している

両手印の判定

  • 合掌の判定は、画面上の絶対距離ではなく手のひら長(手首→中指付け根)を基準にした正規化距離で行う。絶対距離だとカメラとの距離で閾値が破綻するため
  • 両手を近づける過程で片手印(特にパー)が先に確定してしまう問題があったため、2手が検出されている間は片手印の判定を抑制するルールを導入
  • 手印の識別は if 分岐からテーブル駆動のパターンマッチにリファクタし、新しい印をテーブルへの1行追加で定義できるようにした

非同期・演出

  • UniTask で GC アロケーションを抑えた非同期処理。Coroutine 依存から脱却
  • LitMotion で UI のトゥイーン演出

担当した作業

  • ゲームコンセプト・企画立案
  • 企画書 / 仕様書 / 開発ログの作成と継続更新
  • MediaPipeUnityPlugin と Unity の統合、手印認識ロジックの設計・実装
  • MVP / State / Strategy パターンに基づくアーキテクチャ設計
  • R3 によるリアクティブな状態管理、UniTask による非同期処理
  • バトルシステム・敵AI・UI の実装
  • Aseprite によるドット絵制作

スクリーンショット

MUDRA screenshot 1
MUDRA screenshot 2