Motion Dile (ワードウルフ3D版)

https://github.com/NUMaters/WaniAR

Go

Redis

AWS

Vue

Terraform

モーション操作×AIで新感覚のワードウルフを体験!

Rintaro

Claros

Ichina

uqjsqe8gjss

推しアイデア

カメラに映した手でワニを操りながら、AIが配った「行動ミッション」に沿って動く。敵ワニだけ違うテーマで行動しているのを見抜いて投票する、人狼×モーション操作の新感覚ゲーム。

作った背景

4月の新生活で生まれる新たな出会い、でも最初はなかなか打ち解けられない。そんな壁をゲームで壊したかった。スマホ一つで誰でも即参加でき、ワイワイ笑いながら自然と仲良くなれる体験を目指してつくった。

推し技術

スマホのカメラに手をかざすだけで、ワニの口が開いて首が動く。専用デバイス不要・追加学習不要。手の向きをベクトルで計算するだけで、体が乗り移ったような操作感を実現した。

プロジェクト詳細

アプリ概要

手を使ってワニを操作し、プレイヤー同士で敵ワニを見抜く対戦型パーティーゲーム。
プレイヤーは市民チームと敵ワニに分かれ、それぞれ異なるミッションに沿って行動する。
手の動きでワニの首や口を操作する直感的な体験と、人狼ゲームのような心理戦を掛け合わせた、リアルタイム参加型ゲームアプリ。


ターゲット

  • 学園祭・イベント来場者など、その場で盛り上がりたい人
  • スマホ1台ですぐ遊べるカジュアルゲームを求める人
  • 人狼ゲームや正体隠匿系ゲームが好きな人
  • AIやARなど新しい技術を体験してみたい人

技術構成・アーキテクチャ図など

使用技術スタック

image

  • フロントエンド Vue 3+Three.jsでブラウザ完結のAR体験を実現し、MediaPipeによるリアルタイム手認識やDeviceOrientation APIによるジャイロ視点操作をネイティブアプリ不要で提供。
  • バックエンド Goでクリーンアーキテクチャ(domain/usecase/interface/infrastructure層)を採用し、WebSocketによるリアルタイム同期とRedis Pub/Subによるマルチインスタンス間の状態共有を実装
  • AIエージェント(Amazon Bedrock Claude 3.5 Haiku)をマイクロサービスとして分離し、ゲーム中のヒント生成やテーマ生成を非同期で行う設計。
  • インフラ Terraformでモジュール化(VPC/ECS Fargate/Redis/CloudFront/WAF/DNS/監視の8モジュール)し、IaCによる再現性とCI/CDパイプラインによる自動デプロイを実現。ECS Auto Scalingでプレイヤー数に応じた弾力的なスケーリングも対応しています。

image

アーキテクチャ図

image

エージェントアーキテクチャ図

image


遊びごころポイント

ターゲットに刺さる機能

手でワニを操る体験

MediaPipe による手のランドマーク21点のリアルタイム検出により、手の向きで首が動き、指の角度で口が開閉。
まるでワニに乗り移ったような操作感を楽しめる。

AIが毎回ランダムにミッションを出す

AWS Bedrock Haiku 3.6 が市民チームと敵ワニそれぞれに異なる行動テーマを生成。

例:

  • 障害物の近くをうろつく
  • 外周を歩き回る

毎回違う展開になり、繰り返し遊んでも飽きにくい。

人狼風投票フェーズ

テーマに沿って行動しながら、動きの違う敵ワニを見抜く心理戦。

  • 投票は1回のみ
  • 過半数で時間延長可能

短時間でも駆け引きが生まれるルール設計。

スマホ1台で即参加

URLを開くだけで参加可能。

  • キーボード不要
  • ジョイスティック操作
  • ジャイロ対応

誰でも直感的にプレイできる。

弾幕風ヒント演出

対戦中15秒ごとにAIヒントが横スクロールで流れる演出を実装。
ゲームの没入感を損なわず自然に情報提供できる。


技術的なこだわり

口の開き方をいい感じに調整

  • 元のモデルだと口の動きが単調だったので、メッシュを上下に分けて調整
  • 上と下で動きを変えて、自然にパクパクするようにした

手の向きだけで首が動くようにした

  • 機械学習は使わず、手の向きからシンプルに角度を計算
  • ガタつきはなめらかに補正して、違和感なく動くようにした

切断してもすぐ復帰できるように

  • 通信が切れても、ゲームの状態を保持
  • 再接続するだけで、そのまま試合に戻れるようにした

タイマーがバグらない仕組み

  • 複数サーバーでも同時に動かないようにロックをかけた
  • 同じ処理が二重で走らないように工夫

敵の選び方は完全に公平

  • 偏りが出ない乱数を使って敵プレイヤーを決定
  • 誰が選ばれても不公平にならないようにした

投票画面もちゃんと動くように工夫

  • iPhoneでバグらないように、描画方法を工夫
  • 1つの仕組みで順番に画像を作って表示するようにした

アプリ画面

トップ

image

待機画面

image

ゲーム画面(お題やLLMのヒント, 手の物体認識)

image

投票画面

image

結果画面

image

挑戦・成長したところ

初めに最小構成の実装を行い、その後各メンバーが担当機能を独立して拡張できるよう、クリーンアーキテクチャを意識した開発に挑戦した。

責務ごとに構造を分離することで、

  • 機能追加しやすい
  • 修正の影響範囲を限定できる
  • 並行開発しやすい

といった効果があり、開発効率と保守性の両立につながった。


チームワーク・チーム開発で工夫したところ

今回の開発では、各メンバーが大学院で培ってきた研究知見を持ち寄り統合した。

  • 物体認識による手や動作の検知手法と実装 (かずよし)
  • AIエージェントの機能設計・活用 (ゆーた)
  • リアルタイム通信機能設計・実装(ぎんが)
  • 全体アーキテクチャ設計・3D表現(ワニ&地形モデリング)・UI実装 (りお)

単なる役割分担ではなく、それぞれの専門性を融合することで、完成度の高いアウトプットにつなげられた。

Rintaro

@rintaras