概要

カメラの前で左右に動き、敵に合わせたポーズを取って進む、学園祭展示向けのランゲームです。トロッコに乗ったアバターを操作し、3本のレーンでコインを集め、敵を撃退しながら得点を伸ばします。制作は完了しています。

Unityがゲームと画面表示を担当し、別のPythonプログラムがYOLOを用いた身体認識を担当する構成です。身体入力を受け取るだけでなく、参加者の検出から練習、ゲーム本編、結果表示までを一つの流れとしてつなげました。

制作の目的

キーボードやゲームパッドに慣れていない人にも、身体を動かして直感的に遊んでもらうことを目指しました。子どもをはじめ幅広い年代に伝わる操作と、見ている人も楽しめるにぎやかな画面を重視しています。

身体認識とゲームを同時に動かすため、描画負荷を抑えながら、風景やアニメーション、VFXの楽しさを残すことも制作上の目標にしました。

担当したこと

  • Unityクライアントのゲーム進行、入力との接続、画面遷移の設計・実装

  • タイトル、練習、開始・終了のUIと演出、ランキングUIのデザインモック作成

  • 敵・コインの配置と難易度、アニメーション・VFXの調整

  • URP / Shader Graphを使った画作りと、プール・可視範囲・LODなどの描画最適化

身体認識側は別担当との分担です。この記事では、主に自分が取り組んだUnityクライアントと、認識側をつなぐ部分を紹介します。

ランキングのUIは、HTML・CSS・JavaScriptで作成したデザインモックをもとに、Unity側のUI実装を急遽友人にお願いしました。画面のデザインと実装の担当を分け、制作を進めました。

工夫した点

初めてでも操作を覚えられる導入

最初から本編へ入るのではなく、参加者の検出、操作の練習、カウントダウンを経て遊び始める流れにしました。ポーズはアバターの見本と進捗表示で案内し、何をすればよいかを画面から読み取れるようにしています。

身体入力の追跡が途切れたときはゲーム進行を止め、入力待ちと再取得の状態を表示します。認識の一時的な途切れによって、そのまま被弾やゲームオーバーにつながらないようにしました。

速さだけでなく、判断にも緩急をつける

進行に合わせて速度と配置の難しさを変えつつ、難しい配置ばかりが続かないようにしました。同じポーズで敵をまとめて倒す爽快な区間、敵とコインのどちらを選ぶか考える区間、先の列を見て進路とポーズを判断する区間を組み合わせています。

難所の直後には落ち着ける区間を入れ、被弾時の減速もブレーキのように滑らかにつなぎました。配置はScriptableObjectで管理し、コードと切り離して調整できるようにしています。

演出を残しながら、同時稼働の負荷を抑える

認識処理とゲームを同時に動かすことを前提に、敵・コイン・VFXの再利用、視点に応じた可視範囲、草のLODなどを調整しました。固定されたカメラで何が見えるかを利用し、画面全体の印象を保ちながら不要な処理を減らしています。

背景にはワールドベンディングを取り入れ、速度線、車輪の火花、敵の反応、終了時のラグドールなどを組み合わせました。単に軽くするだけでなく、身体を動かした手応えが視覚にも返ってくるように調整しました。

演出とゲーム処理の役割を分ける

UniTaskで非同期の待機、R3で状態やイベントの通知、VContainerでゲームの依存関係を整理しました。固定の演出はAnimation / Timeline、状態に応じた表示の変化はコードやLitMotionで扱い、同じTransformを複数の仕組みが同時に動かさないようにしています。

タイトルからロード、本編、結果への遷移では、表示の準備ができてから画面を開く流れにしました。ランキングにはGASとGoogle Sheetsを組み合わせ、ゲーム本体とは別の通信処理として扱っています。

プレイ動画

ゲームの導入からプレイまでの流れを紹介する動画です。音声付きで再生できます。

2026年 学園祭展示作品のプレイ動画