開発

手とコントローラーを同時に使う(マルチモーダル)

更新日時: 2026/02/17
マルチモーダル入力は、手とコントローラーの両方を同時にトラッキングする機能を提供します。コントローラーを手に持っているかどうかも示します。マルチモーダル入力では、手を使うことで没入感が高まり、コントローラーを使うことで正確さとハプティクスを実現できるため、ユーザーは両方のメリットを活用できます。システムは自動的に、コントローラーが手の中にあるか、または手から離れている(例: 机に置かれている)かを検出し、ジェスチャーコントロールとコントローラー入力の間のシームレスな移行を可能にします。マルチモーダル入力を有効にすると、自動トランジションやダブルタップなど、ほかのトランジション方式は無効になります。
QuestでのUnity開発が初めての方は、最初のVRアプリを作成するためのHello Worldガイドをご覧ください。

マルチモーダル入力のメリット

  • 手とコントローラーを使用するゲームプレイ: コントローラーを片手で持ってツールや武器として使い(高い精度、ハプティクス、ワイドFoV)、もう片方の手でオブジェクトとのインタラクションや呪文などの操作を行えます(高い没入感)。
  • 1つのコントローラーを使用するゲームプレイ: ほとんどのインタラクションで1つのコントローラーしか必要ない場合に、ユーザーが1つのコントローラーだけをつかみ、もう一方の手は必要に応じて没入感を高めたり普段どおりのインタラクションをしたりできるようにすることができます(例: ラケットとしてコントローラーを使い、もう一方の手でボールを拾ったりメニューを操作したりする)。
  • 手とコントローラーを快適に使い分ける: 片手はコントロールとの直接のインタラクションのために使い、もう一方の手はコントローラーを「リモコン」として使って簡単で間接的なインタラクションを行います。
  • 手とコントローラーの瞬時移行: ジェスチャーコントロールがアクティブな場合、コントローラーが手から離れると、それが瞬時に認識されます。これにより手動トランジションの必要性を最小限に抑えることができ、自動トランジションが遅かったり失敗したりする問題を解決できます。
  • 自分のコントローラーを見つける: 手を使っている間もコントローラーがトラッキングされていれば、ユーザーがコントローラーを使おうとした場合に、アプリはコントローラーがどこにあるかをユーザーに表示することができます。これによりコントローラーへのスムーズな移行が可能になり、パススルーをオンにしたりヘッドセットを外したりすることで没入感が損なわれることがありません。

既知の制限

  • 「手持ち」信号は、ハンドポーズ、コントローラーポーズ、コントローラー信号など、さまざまな不完全な信号に基づいています。その結果、トラッキングが失われたり不正確だったり、コントローラーがしばらくの間静止していたりという特定のシナリオでは、コントローラーが手元にないことがシステムによって示されることがあります。そのため、このような制限を念頭に置いて設計することをおすすめします(例えば、コントローラーから手に誤って短時間移行してしまって手から物を落とすようなことがないようにするなど)。
  • 一時停止機能が呼び出されると、アプリは、従来の手とコントローラーを使うアプリが実行する「非同時」モードに切り替わります。その場合ユーザーは、一度に手かコントローラーのどちらか一方だけを使うことができます。インプットがあった時点でユーザーがコントローラーを握っているかどうかに応じて、トラッキングシステムが正しいインプットを認識して決定を下すために数秒かかる場合があります。
  • Link on PCを使っている場合、コントローラーのポーズデータを積極的に使っていないなら(テーブルの上に寝転がっているときなど)、そのデータは利用不可能です。

互換性

ハードウェアの互換性

  • Quest 2
  • Quest Pro
  • Quest 3
  • Quest 3S

ソフトウェアの互換性

  • Unityバージョン2022.3.15f1以上(Unity 6以上を推奨)
  • Meta XR Core SDK v62以上

機能の互換性

  • マルチモーダル入力は、インサイドアウトボディトラッキング(IOBT)やフルボディ合成(FBS)とは互換性がありません。この機能を同時に有効にしないでください。
  • マルチモーダル入力を高速モーションモード(FMM)と同時に有効にすることはできません。両方有効にした場合、マルチモーダルが優先されます。FMMはマニフェストの中で定義されているため、アプリレベルでFMMを有効にし、FMMがそれほど重要でない特定のエクスペリエンスでのみマルチモーダルをオンにすることができます。
  • Quest 2でマルチモーダルをリップシンクと同時に有効にすることはできません。
  • パススルー、マルチモーダル入力、ワイドモーションモード(WMM)を一緒に有効にすることはできません。すべてを同時にオンにした場合、システムでWMMが無効になります。
  • Capsenseの手との完全互換性。
  • ハプティクスとの完全互換性。

設定

  1. Meta XR Core SDKパッケージV74以上をインストールします。
  2. Meta Quest VRヘッドセット用Unity Hello Worldの説明に従って、カメラリグとコントローラーを設定します。
  3. OVRCameraRigにアタッチされているOVR Managerスクリプトを見つけます。[Quest Features (Questの機能)]の下で、[Simultaneous Hands And Controllers (手とコントローラーを同時に)][Supported (対応)]または[Required (必須)]に設定します。
    Enable concurrent hands and controllers
  4. [Window (ウィンドウ)] > [Package Management (パッケージマネジメント)] > [Package Manager (パッケージマネージャ)]の下で、[Meta XR Core SDK]を検索し、[Samples (サンプル)]タブの下で[Import (インポート)]をクリックします。これにより、マルチモーダルサンプルシーンがインポートされます。
    Import the sample scene
  5. [Project (プロジェクト)]で、OVRControllerPrefabを検索します。
  6. 検索結果からOVRControllerPrefabを、Hierarchyの新しいLeftHandAnchorDetached GameObjectとRightHandAnchorDetached GameObjectにドラッグします。デモについては、Assets/Samples/Meta XR Core SDK/<version>/Sample Scenes/SimultaneousHandsAndControllers.unityをご覧ください。
    Add OVRControllerPrefab objects
  7. OVRControllerPrefab GameObjectのそれぞれについて、[Show State (表示状態)] [Controller Not In Hand (手持ちでないコントローラー)]に、[Controller (コントローラー)][Touch]に設定します。
    Set ShowState
  8. [Project (プロジェクト)]で、OVRControllerPrefabを検索します。
  9. 検索結果のOVRControllerPrefabLeftControllerInHandAnchorにドラッグします。
  10. [Hierarchy (階層)]で、OVRControllerPrefabを選択します。
  11. [Inspector (インスペクター)]の下で、[Controller (コントローラー)]を手に一致するように設定してから、[Show State (表示状態)][Controller In Hand (手持ちコントローラー)]に設定します。
    Anchor setup for controllers
  12. ステップ9~11を、RightControllerInHandAnchorについて繰り返します。
  13. [Project (プロジェクト)]で、OVRHandPrefabを検索します。
  14. 検索結果のOVRHandPrefabLeftHandOnControllerAnchorにドラッグします。
  15. [Inspector (インスペクター)]で、[Hand Type (手のタイプ)]の設定値が手であることを確認してから、[Show State (表示状態)][Controller In Hand (手持ちコントローラー)]に設定します。
    Anchor setup for hands
  16. ステップ14~15を、RightHandOnControllerAnchorについて繰り返します。

prefabの変更内容

OVRControllerHelperとOVRHandには、ShowStateenumがあります。そのオプションは以下のとおりです。
  • Always (常に): オブジェクトがコントローラーと手の状態に基づいて自動的に無効になることはありません。
  • [Controller in Hand or no Hand (手持ちコントローラーまたは手がない)]: これは、コントローラーがユーザー手持ちでない場合、またはジェスチャーコントロールが完全に無効になっている場合に、このオブジェクトが無効になることを意味します。
  • Controller in Hand (手持ちコントローラー): これは、コントローラーがその時点でユーザーの手にない場合にオブジェクトが無効になることを意味します。
  • Controller Not in Hand (手持ちでないコントローラー): これは、オブジェクトがユーザーの手の中にある場合は無効になることを意味します。これは、コントローラーが机の上にあるなど、手から離れている状況で使用されます。
  • No Hand (手がない): ジェスチャーコントロールが有効であり、かつ手がある場合、オブジェクトのレンダリングを無効にします。
OVRControllerPrefab: OVRControllerHelper
  • Show State (表示状態)
  • When Hands Are Powered By Natural Controller Poses (手でナチュラルコントローラーポーズを利用する場合): これは、ハンドポーズが自然な状態であっても、コントローラーをレンダリングできるかどうかを制御するためのチェックボックスです。これは、コントローラーが手から離れた状態で使います。
OVRHandPrefab: OVRHand
  • Show State (表示状態)

マルチモーダル機能のための新しいアンカー

  • LeftHandAnchorDetachedRightHandAnchorDetached: これらのアンカーは、手とコントローラーの同時利用APIが有効になっている場合に、ユーザーの手持ちでないコントローラーのために使います。デフォルトのCameraRig prefabには、これらのアンカーにコントローラーのprefabが含まれていないため、それらを使うには追加する必要があります。これらのprefabの表示状態は[Controller Not In Hand (手持ちでないコントローラー)]に設定する必要があります。

手から離れたコントローラーのプロファイル

マルチモーダルが有効になっている場合、SDKは手から離れたコントローラーの専用プロファイルを使って、現在ユーザーが手に持っていないコントローラーをトラッキングします。このプロファイルは、以下のコントローラータイプで自動的に登録されます。
  • Oculus Touchコントローラー - 標準のTouchコントローラー
  • Meta Quest Touch Proコントローラー - 機能強化されたTouch Proコントローラー
  • Meta Quest Touch Plusコントローラー - Touch Plusコントローラー
SDKは、OpenXRランタイムによって検出されたアクティブなインタラクションプロファイルに基づいて、標準コントローラープロファイル(コントローラーを手に持っている場合)と手から離れたコントローラーのプロファイル(コントローラーを置いている場合)を自動的に切り替えます。これにより、システムは手と、手から離れたコントローラーの物理的な位置を同時にトラッキングすることができます。

トラブルシューティング

ヘッドセットでマルチモーダルが動作していることを確認するにはどうすればいいですか?

手を離れたコントローラーアクションパスからデータが提供されることを確認してください。

コードを変更せずに自分のヘッドセットでこの機能を試すことはできますか?

いいえ。

コントローラーと手の切り替えは、サンプルでは動作しません。

Quest 2 (Meta Quest Proコントローラーをヘッドセットと組み合わせる)、Quest 3、Quest 3S、Quest Proのいずれかで実行していることを確認してください。
Using OVRCameraRig -> TrackingSpace to get positions of hands and controllers simultaneously
OVRCameraRig Tracking Spaceオブジェクト階層では、手とコントローラーのデータをレガシーアンカーを使って同時に提供するのは困難です。そのため、Tracking Spaceに複数の新しいアンカーを作成し、コントローラーと手のprefabに、レンダリングするかどうかを決めるゲートロジックを追加する必要があります。
ナビゲーションロゴ
日本語
© 2026 Meta