アドカレ
KENTOのひとりアドカレ12日目の記事です。
https://qiita.com/advent-calendar/2025/kento
環境情報
| ツール/SDK | バージョン |
|---|---|
| Unity | 6000.0.62f1 |
| Meta XR Core SDK | 81.0.0 |
| Open XR Plugin | 1.16.0 |
| XR Interaction Toolkit | 3.0.9 |
| XR Hands | 1.7.1 |
事前準備は以下の通りです。
デモ
以下GIFのようにコントローラーや指先でつつくインタラクションをみていきます。

つつく処理
VRではよくPokeというつつく動作そのままの名前が付けられてインタラクションが実装されており、XRIでもPokeと定義されています。
つかむ処理同様、MetaのAPIへの依存はないため、XRIの機能で実装したインタラクションはOpenXR互換のデバイスであればそのままの移植が可能となります。
参考リンク:【Meta Quest】XR Interaction Toolkitのサンプルから理解する"つかむ処理"
つかむ動作の中核となるのが、XRPokeInteractorです。UIに関しては、このコンポーネントを用意し、UI側のCanvasにTrackedDeviceGraphicRaycasterをアタッチするだけでつつく処理が動作します。(XRUIInputModuleがシーンにある前提)
つつかれる側が3Dオブジェクトの場合、XRSimpleInteractableが必要です。IntaractableEventsに処理を登録することで、押した/離れたなどのイベントに応じた処理を実行可能となります。
XRPokeFilterは文字通り、つつく処理の条件をフィルタリングできます。
例えば、この画像の設定だと、PokeDirectionがNegativeYとなっており、かつPokeAndleThresholdが45度となっています。

真上から垂直に押す場合が0度となり、その角度から45度を許容範囲としてインタラクションが動作するようにフィルタリングされます。
許可範囲(45度以内)
\ ↓ /
\ ↓ /
\ ↓ / ← この範囲内からのPokeのみ有効
\ ↓ /
┌─────────────┐
│ Button │
└─────────────┘
もう1つ重要なコンポーネントとして、XRPokeFollowAffordanceがあります。

このコンポーネントはつついた時の押し込まれる挙動を簡単に設定できます。
わかりやすい例として、UIを見ていきます。Poke可能なUIにはXRIのコンポーネントとしてXRPokeFollowAffordanceだけがアタッチされているのですが、このコンポーネントだけで以下GIFのような押し込まれる挙動が作れます。
つつかれたときに押し込まれる挙動になってほしいパーツをあらかじめMaxDistanceと同じ距離だけ離れて配置しておけば、押し込まれる挙動がきれいに動きます。
3Dオブジェクトの場合も基本的に同じような設定で押し込まれる挙動を実現できます。
つかむ動作同様、ハンドトラッキングの際にもつつく処理を変更なく動かせるので非常に便利です。





