うちぬけ!的あて道場

Unity C# VR チーム開発 プログラマー
プロジェクト概要
弓矢を操作するVR的当てゲーム
東北ゲームアワード2026 松山洋賞 受賞 https://x.com/TohokuGameAward/status/2028432776152920077
担当範囲
プログラミング(弓矢の生成・掴み・発射・弓を引いたときのコントローラー 振動処理)
使用ツール・言語
Unity, C#, Git, Github
ライブラリ
XR Interaction Toolkit, UniTask, DOTween
チーム構成
7名(プランナー1名、プログラマー4名、モデラー2名)
制作期間
2025年6月 〜 2025年10月(約5ヶ月)
GitHubリンク
Github リポジトリ

ゲーム概要

弓矢を用いて現れる的に弓を放つVR的あてゲーム。
VRコントローラーで実際に弓を引き絞る動作を行い、矢を放つことが出来る。
的を射抜くと得点が加算され、制限時間内にどれだけ多くの得点を稼げるかを競うゲームとなっている。
また、的は出現直後に射ったり中心に当てたりすると高得点が獲得できる。
ランキング機能はPlayFabを使用し、大学文化祭で展示を行った際は、
プレイ後にランキングが更新され確認できた。
また、本ゲームは東北ゲームアワード2026に出展し、松山洋賞を受賞した。
https://x.com/TohokuGameAward/status/2028432776152920077

[ゲームサイクル]
・タイトルをクリック
・チュートリアル説明
・弓矢自動掴み、チュートリアル用的出現
・的を射抜く
・ゲーム開始、的出現、制限時間経過でゲーム終了 ・最終得点、ランク表示、タイトルへ戻る

仕様のこだわり

リアルな弓道体験とゲームとしての操作しやすさを両立させることを目指した。
弓に矢を近づけてトリガーボタンを押すことで矢をつがえられる仕様にし、プレイヤーがリアルな動作を行うようにした。
また、弓を引く際はコントローラーが振動し、引く距離に応じて振動の強さが変わるようにすることで、実際に弓を引いているかのような感覚を与え、操作方法が理解しやすくなるようにした。
加えて、弓を引く距離に応じて矢の威力が変わるようにした。
一方、矢を放った後に新たな矢が自動的に手に補充されるようにし、プレイヤーがストレスなくゲームを続けられるようにした。

技術的なこだわり・解説

UniTaskによる掴み処理の競合の改善

VR空間での操作性を高めるため、「弓を掴んだ際、もう片方の手に矢を自動生成・把持させる」というシームレスな操作システムを構築。 XR Interaction Toolkit (XRIT) のイベントライフサイクルと C# の非同期処理を組み合わせ、堅牢な挙動を実現しました。
【技術的課題】XRGrabInteractable.selectEntered イベントの直後に矢の把持処理を実行すると、XRIT内部でのInteractor(手)の状態更新が完了しておらず、弓を掴んだ手で矢を二重に掴もうとするなどの競合が発生していました。
【解決策】UniTask.NextFrame() を利用し、処理を意図的に1フレーム遅延。これにより、弓の把持状態がシステム全体に確定した直後に、逆の手への矢の割り当てを安全に行うフローを構築しました。

[動作フロー]
・右手で弓を掴む
・(1フレーム待機:状態の確定)
・左手に矢を生成し、自動で掴ませる

実際のソースコード (GrabDetector.cs)