本日はMRTKv2.xの調査枠です。
MRTKv2.xを使ったMetaQuest3向けアプリでハンドレイのポインタが正常に動作しない問題が発生したので情報を記事に残します。
今回は社内の有識者に本問題の一旦の回避策を教えて頂いたので記録します。
前回記事
以下の前回記事からの続きです。
bluebirdofoz.hatenablog.com
問題の原因
本問題はMeta XR SDKのv66で以下のOVRHand.csの初期化処理に修正が入ったことが原因です。
Packages/Meta XR Core SDK/Scripts/Util/OVRHand.cs
v66ではハンド用ポインターのHierarchy上の構成が異なるため、MRTKのハンドレイのポインターで齟齬が発生します。
・v65のOVRHand.cs
private void Awake() { _pointerPoseGO = new GameObject($"{HandType} {nameof(PointerPose)}"); _pointerPoseGO.hideFlags = HideFlags.HideAndDontSave; PointerPose = _pointerPoseGO.transform; if (_pointerPoseRoot != null) { PointerPose.SetParent(_pointerPoseRoot, false); } if (RayHelper != null) { RayHelper.transform.SetParent(PointerPose, false); } GetHandState(OVRPlugin.Step.Render); }
・v66のOVRHand.cs
private void InitializePointerPose() { _pointerPoseGO = new GameObject($"{HandType} {nameof(PointerPose)}"); _pointerPoseGO.hideFlags = HideFlags.HideAndDontSave; if (_pointerPoseRoot != null) { PointerPose.SetParent(_pointerPoseRoot, false); } else { PointerPose.SetParent(transform, false); // 影響箇所 } } private void Awake() { if( _pointerPoseGO == null ) { InitializePointerPose(); } if (RayHelper != null) { RayHelper.transform.SetParent(PointerPose, false); } GetHandState(OVRPlugin.Step.Render); }