Meta Quest 3 MR盆栽应用开发:基于Unity与Meta XR SDK的手势识别实现
【Part 1】ハンドトラッキングで行う盆栽育成アプリの開発
はじめに
今回、私は株式会社GENEROSITY様のもとでインターンシップを行わせていただき、その間に今回のハンドトラッキングで盆栽を手入れするアプリの企画立てから開発を行いました。その過程を記していきます。
概要
今回私が開発したのは「MR盆栽」
これは現実空間上にバーチャル盆栽を設置でき、ハンドトラッキングでのユーザーのお手入れ次第で造形に変化が現れるアプリです。
最終的に今回制作できたものが以下のものです。

開発環境
- Windows 11
- Meta Quest 3
- Unity 6000.3.26f1
- Meta XR SDK
- Meta MR Utility Kit
- OpenXR plugin
- Blender 5.2LTS (次回の記事で使用)
環境構築
Meta 公式ドキュメント:Unity パススルーチュートリアル をもとに構築しています。細かい手順はリンク先で確認することをおすすめします。
プロジェクトの新規作成
「Mixed Reality(MR)」 でも問題ないです。
必要なパッケージの導入
プロジェクト設定
Build Profiles でAndroidをアクティブにします。

Meta XR SDKのProject Setup Toolを開きます。

Fix All を押して現在のプロジェクトのXR向けの設定に自動で変更します。

残っている警告がありますが、これはビルドする際のアプリケーションの名前が設定されていないことを示しています。現状は問題ないです。
適用された設定の確認
Project Settings で XR plug-in Management →OpenXRを開きます。
Androidタブで以下の Meta Quest Supportにチェックが入っているか確認してください。

私の場合はこのチェックが入っていなくビルド後の動作がXRとしてうまくいかなかったりしました。警告も特に見当たらなく見落とすと後で大変です。
XR用の設定(CameraRig)
シーンの基本セットアップ
OVRManager の設定(パススルー、トラッキング、空間表示)
OVRCameraRigを選択し、InspectorでOVR Managerコンポーネントを開きます。
- MR(パススルー)有効化の手順
SceneSupport と Passthrough を Required にします。 - ハンドトラッキングを有効にするためにも同コンポーネント設定から
Hand Tracking Suppor を Controllers And Hands にします。
また私記事では Hand Skeleton version は OpenXR Hands を使用します。

OVR Hand Skeleton と OpenXR Hand Skeleton で骨の配列が異なるため、統一しないと特定の骨の位置を直接参照する際に別の骨が参照されるといったことが起きます。
私の場合、OVR Hand Skeleton のまま使用していた際に人差し指を参照しているはずが、薬指を参照されるてしまうといったことがありました。
- 背景の透過設定
CameraRigの子 CenterEyeAnchor のCameraコンポーネントで Environment を見つけ、Background Type を Solid Color、アルファ値を0にします。

後にパススルーを確認するためにも何かしらオブジェクトを配置しておくとよいです。
ビルド
Windows側では以下のページから「Oculus ADB Drivers」を導入する必要があります。
https://developers.meta.com/vr/downloads/package/oculus-adb-drivers/
開発者モードになっているQuest 3ではUSB-CケーブルでPCと接続した際に、開発者デバッグの許可通知で許可をします。
その後、UnityのBuild Profileで確認するとRun Deviceで接続しているQuest 3が選択できるようになります。
ビルド後はQuest 3でパススルーが確認されているはずです。
ハンドジェスチャーの検知
ハンドジェスチャーでイベントを呼び出す仕組みは以下の記事のジェスチャーの登録からジェスチャーによるイベントの呼び出しを参考にさせて頂きました。そのためこの方の記事を見て頂くことをおすすめします。
ジェスチャー判定の実装
今回私が用意したのはMR盆栽の手入れ用に
"つまむ(Pinch)"(親指と人差し指を閉じる)
になります。
指を設定する際、私はまずこのように親指と人差し指の状態を使う設定をしました。
- 親指:Curl(ひねり), is, Closed
- 人差し指:Curl(ひねり), is, Closed
- その他の指:Nothing(判定しない)

しかし、指のトラッキングは判定が細かく、指を丁寧に曲げ切らないと検知してくれないことが多いです。
以下の動画では、判定がオンの時に赤くマテリアルを変えています。

そのため"つまむ"では"指を閉じているとき"ではなく、"指を開いていないとき"を検知することにしてみます。
これで、つまむ動きでも判定が取れるようになりました。
次回
- [Part2:機能実装編]
投稿完了次第リンク更新
来源:Qiita · Unity 开发社区 · qiita.com






