XRの未来は「ハンズファースト」――そしてUnityのツールはすでに準備万端だ

共著者:アイザック・シー(主任テクニカルプロダクトマネージャー)、アレクサンドラ・セラルタ(シニアソフトウェアエンジニア)、ケトキ・ジャダフ(スタッフプロダクトデザイナー)、デイブ・ラデル(ソフトウェアエンジニアリング部門シニアマネージャー)
なぜ「ハンズファースト」がXRの未来なのか
ハンドトラッキングは数年前からXRでサポートされている入力方式ですが、多くのプロジェクトでは依然として、コントローラーを軸にコア体験を構築した後に追加される二次的な機能として扱われています。ますます多くの体験において、その優先順位はもはや意味をなさなくなっている。ジェスチャや身体的な操作、あるいはオブジェクトとの直接的なインタラクションを軸にしたゲームは、本来、手を使ってプレイする方がより自然に、より直感的に表現でき、コントローラーでは再現できないものなのです。
これを実現するには、これまで2つの主要なツール面の課題を克服する必要がありました。すなわち、信頼性の高いカスタムハンドジェスチャを構築するには多大なスクリプト作業が必要であり、また、ヘッドセットが物理的に手元にない状態では、手のインタラクションに関する反復作業が困難だったのです。UnityのXRパッケージに追加された2つの機能は、これら両方の課題に直接対応しています。「XR Hands」パッケージに含まれるXRハンドキャプチャ機能を使用すると、デバイス上で実際の手のポーズを記録し、再利用可能なジェスチャーアセットとしてUnityにインポートすることができます。「XR Interaction Toolkit」の「XR Interaction Simulator」に追加された「Hands Simulation」は、Unity エディター上で手のトラッキング開発を完全に再現するため、ヘッドセットを装着せずに反復開発を行うことができます。
この記事では、両方の特徴の仕組み、使用すべき場面、および既存のプロジェクトへのインテグレーション方法について解説します。
XR Handsキャプチャ
XR Hands パッケージは、XRHandSubsystem を通じてフレームごとのジョイントデータを公開します。そのデータに基づいてジェスチャを構築するには、一連のジョイント角度と指の形状の条件を定義し、それらが同時に満たされたときに認識されるポーズとなるようにする必要があります。ピンチやタップといった簡単なジェスチャーについては、このパッケージにはすぐに使える実装が含まれています。カスタマイズを行う場合、従来のアプローチでは指ごとに指の形状を設定する必要があり、そのため、すべての処理をデバイス上で実行しなければなりませんでした。
その手作業によるプロセスは基礎的なものではありましたが、XR Hands Captureで現在可能となっている方法と比べると、時間がかかり、信頼性も劣っていました。シグネチャーポーズや3D オブジェクトの操作、UIの精密な操作といったゲームプレイの仕組みにおいて不可欠な、ジェスチャーの正確な再現性は、指の形状を一つひとつ手作業で定義していた時代には実現が困難でした。こうした近似手法では、処理に時間がかかり、手の形状の違いによって結果が不安定になりやすく、真に魅力的な「ハンドファースト」体験に不可欠な、自然で直感的な操作感が得られませんでした。

仕組み
XR Hands Captureは、デバイス上でポーズをとっている間にXRHandSubsystemが生成する実際のジョイントデータを記録し、その記録データからXRHandShapeアセットを生成することで、この課題に対処します。近似値ではなく、実際の動作データに基づいてジェスチャを作成しているため、手の大きさや動きのばらつきがあっても、結果として得られるインタラクションの安定性が高まり、意図した通りの操作感を実現できます。
ワークフロー:
- Package Managerから「XR Hands」パッケージ内の「HandCapture」サンプルをインポートします。
- OpenXRデバイスにサンプルシーンを展開して開いてください。
- 撮影したいポーズをとってください。このシーンは、XRHandSubsystemからのライブのジョイントデータをXRHandCaptureSequenceに記録します。
- 「XR Hand Capture」Inspector ウィンドウ([Window] > [XR] > [XR Hand Capture])を使用して、録画データを Unity エディターにインポートします。
- 「XRHandShape」アセットを抽出します。これは手のポーズをシリアライズした表現であり、任意の「StaticHandGesture」コンポーネントやカスタム検出ロジックから参照することができます。
- 必要に応じて許容範囲を調整し、再度記録して精度を高めてください。

「XRHandCaptureSequence」と「XRHandShape」はどちらも実際のキャプチャデータから生成されるため、ビルドしたジェスチャライブラリは手の実際の動きを反映しており、プレイヤーが実施するインタラクションにおいて自然な操作感を実現します。また、これによりエンジニア以外の人もジェスチャーの作成に参加できるようになります。デザイナーやアニメーターは、コードに触れることなく、デバイス上で直接ポーズを記録し、改良を重ねることができます。これにより、インタラクションの「使い心地」を最も重視するデザイナーやアニメーターが、その設計に直接関わり続けることが可能になります。
XRインタラクションシミュレータにおける手のシミュレーション
「XR Interaction Toolkit」に含まれる「XR Interaction Simulator」を使用すれば、開発者は物理的なデバイスを用意することなく、Unity エディター内でXR体験を実行できます。これは、テストのたびにヘッドセットを装着することが大きなオーバーヘッドとなる初期段階の反復開発において特に有用です。つい最近まで、コントローラーからの入力のみをサポートしていました。ハンドトラッキングを中核としたプロジェクトには同等のものが存在しなかったため、ハンドインタラクションの開発は基本的にヘッドセットに依存していた。これまでは、タップ、ピンチ、つかむといった標準的なビルトインジェスチャーに加え、シミュレーター上で独自のカスタムジェスチャーを直接テストできるようになりました。これは、UnityのXRツール以外ではどこにもない特徴です。

導入ガイド
まず、Unityの最新バージョン(6.3以降)をダウンロードし、Unity Package Managerからこれらの特徴を追加してください。
- XR Handsキャプチャは、XR Handsパッケージ(バージョン1.7以降)の一部として提供されます。インストールまたは最新バージョンにアップデートし、`HandCapture` サンプルをインポートして、開始してください。完全なドキュメントとAPIリファレンスは、XR Handsのドキュメントでご覧いただけます。
- 「Hands Simulation」は、XR Interaction Toolkit パッケージ(バージョン 3.5 以降)および XR Hands(バージョン 1.8 以降)の一部として、XR Interaction Simulator で利用可能です。最新バージョンをインストールまたはアップデートし、「XRI Starter Assets」サンプルをインポートしてください。設定の詳細については、XRIのドキュメントを参照してください。
より幅広い視点から開始するには、「XR Interaction Toolkit Examples」に、一般的なハンズファーストインタラクションパターンを網羅したリファレンスシーンが含まれています。特にXR Handsキャプチャに関するコミュニティのリファレンスをお探しなら、Dilmer Valecillos氏が作成したハンドキャプチャのデモプロジェクトが参考になるでしょう。開発者たちがUnity XRを使ってどんなものを作っているのか、気になりませんか?見てみてください。
次は?
現在進行中の作業は、両方のパッケージにまたがっています。XR Handsにおける主な開発領域には、OpenXR仕様へのポーズデータの準拠、Palm Pose拡張機能のサポート、ピンチ、ポーク、エイム、およびデバイスポーズにわたる入力アクションのマッピング、ならびにポークインタラクションの改良が含まれます。また、手のデータが「素手でのカメラトラッキング」によるものか、「コントローラーによる推定」によるものかを判別するOpenXR拡張機能のサポートも拡充しています。これは、プレイヤーの物理的なインタラクションに応じてゲームメカニクスを適応させたいゲームにとって重要な機能です。XRIでは、ハンズオン型のユースケースが増える中、デバイス上でのテストに代わる信頼性の高いプロキシとして、「XR Interaction Simulator」への投資を継続しています。
7月9日午後12時(米国東部時間)に開催されるライブストリームにぜひご参加ください。Metaから特別ゲストをお迎えし、XR HandsキャプチャとXRIシミュレーターの実演に加え、ライブQ&Aや今後の展望についてもご紹介します。