MRが楽しい

MRやVRについて学習したことを書き残す

MRTKv2.xを使ったMetaQuest3向けアプリでハンドレイのポインタが正常に動作しない問題 その4

本日はMRTKv2.xの調査枠です。
MRTKv2.xを使ったMetaQuest3向けアプリでハンドレイのポインタが正常に動作しない問題が発生したので情報を記事に残します。
今回はMRTKv2.x側のコード修正による回避方法についてです。

前回記事

以下の前回記事からの続きです。
bluebirdofoz.hatenablog.com

問題の原因とMeta XR SDK側の修正による回避方法は以下の記事を参照ください。
bluebirdofoz.hatenablog.com

問題の回避策

本問題はMeta XR SDKのv66でOVRHand.csの初期化処理に修正が入り、PointerPoseのルートオブジェクトが変わったことが原因です。
MRTKv2.xでは以下のOculusHand.csでPointerPoseの姿勢をポインターに利用しており、この処理を修正することで問題に対処できます。

Packages/MixedRealityToolkitFoundation/Providers/Oculus/XRSDK/MRTK-Quest/Scripts/Input/Controllers/OculusHand.cs

OculusHand.csの以下の該当コードを修正します。
・修正前

129:            // Leverage Oculus Platform Hand Ray - instead of simulating it in a crummy way
130:            currentPointerPose.Position = trackingOrigin.TransformPoint(hand.PointerPose.position);
131:
132:            Vector3 pointerForward = trackingOrigin.TransformDirection(hand.PointerPose.forward);
133:            Vector3 pointerUp = trackingOrigin.TransformDirection(hand.PointerPose.up);

・修正後

129:            // Leverage Oculus Platform Hand Ray - instead of simulating it in a crummy way
130:            // PointerPoseの親オブジェクトが変わったことを考慮してローカル座標の姿勢を取得するように修正する
131:            Vector3 pointerPosePosition = hand.PointerPose.localPosition;
132:            Vector3 pointerPoseForward = hand.PointerPose.parent == null ?
133:                hand.PointerPose.forward :
134:                hand.PointerPose.parent.InverseTransformDirection(hand.PointerPose.forward);
135:            Vector3 pointerPoseUp = hand.PointerPose.parent == null ?
136:                hand.PointerPose.up :
137:                hand.PointerPose.parent.InverseTransformDirection(hand.transform.up);
138:
139:            currentPointerPose.Position = trackingOrigin.TransformPoint(pointerPosePosition);
140:            Vector3 pointerForward = trackingOrigin.TransformDirection(pointerPoseForward);
141:            Vector3 pointerUp = trackingOrigin.TransformDirection(pointerPoseUp);

修正を行ってアプリを実行すると、以下の通り正常な位置からハンドレイのポインターが飛ぶようになります。