0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Meta Quest】XR Interaction Toolkitのサンプルから理解する"つかむ処理"

0
Last updated at Posted at 2025-12-08

アドカレ

KENTOのひとりアドカレ9日目の記事です。
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

事前準備は以下の通りです。

XRIの以下サンプルを元に話を進めます。
Assets/Samples/XR Interaction Toolkit/3.0.9/Starter Assets/DemoScene.unity

デモ

GIFのようにつかみ処理を行うサンプルの構造を見ていきます。

2025AdventCalendar13.gif

つかむ処理

XRIの基本インタラクションとして、つかむ処理が実装されています。当然ながら、MetaのAPIへの依存はないため、XRIの機能で実装したインタラクションはOpenXR互換のデバイスであればそのままの移植が可能となります。

つかむ動作の中核となるのが、NearFarInteractorです。このコンポーネントの特徴として、遠距離/近距離の両方をサポートしていることが挙げられます。

image.png

Inspectorにもそれぞれを有効/無効を切り替える設定が存在しています。
image.png

そして、それらのつかみ機能と対になるのがCaster機能です。ShpereInteractionCasterは近距離、CurveInteractionCasterは遠距離の機能それぞれにおける対象オブジェクトの検出を担当しています。InteractionAttachControllerではつかんだ際にどのように追従させるかを設定できます。

image.png

つかむ動作のトリガーとなる入力は、UnityのInputSystem(InputAction)で抽象化されています。
image.png

※SelectとActiveって何が違うんだろうと思って調べてみたのですが、懐中電灯のオン/オフようなSelect中に発生するイベントをActiveと定義しているようでした。

An interface that represents an Interactor component that can activate an Interactable component. Not to be confused with the active state of a GameObject, an activate event in this context refers to a contextual command action, such as toggling a flashlight on and off.

引用元:IXRActivateInteractor.cs

あとはつかまれる側です。XRGrabInteractableが必須です。XRGeneralGrabTransformerはなくても動きます。

image.png

それぞれどんな役割か超簡単に言うと、XRGrabInteractableは「つかまれる物としての設定」、XRGeneralGrabTransformerは「つかんだ後の動き方」 という分離です。

色々設定がありますが、どういう構造であるかさえ理解しておけば、細かいパラメータの持つ意味などを丸暗記する必要はないと思います。ソースがPackageにあるので、Claude CodeやCursorなどに聞けば役割をすぐ教えてくれます。


ここまでの解説はコントローラーの操作を対象としたシーンでしたが、ハンドトラッキングの方も見ていきます。

XRIのHand Interaction Demoをインポートします。
image.png

以下パスがサンプルシーンです。
Assets/Samples/XR Interaction Toolkit/3.0.9/Hands Interaction Demo/HandsDemoScene.unity

Hand Interaction Profileを有効化する必要があります。PC環境も有効にしておけばLinkでデバッグも可能です。
image.png

うれしいことにコントローラーのときと使うコンポーネントも構造も一緒です。入力ソースはInputActionの抽象化レイヤーとして定義されているので、環境に応じて何をもとに入力したかを意識する必要はありません。
image.png

つかまれる側も同様です。
image.png

この前提の元、XRInputModalityManagerがコントローラーとハンドトラッキングの切り替え処理を担っています。具体的な処理として、Left/RightHandとLeft/RightControllerのアクティブ切り替えをやってくれます。

image.png

ちゃんと動いてくれました。
2025AdventCalendar14.gif

おわりに

XRI、素晴らしいです。これほど開発を楽にしてくれて大変感謝です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?