🥎

Meta XR SDKを使って、手でオブジェクトを投げられるようにする

2023/12/04に公開

はじめに

Meta XR SDKを使って、手でオブジェクトを投げられるようにする方法をメモします。Building BlocksのThrowable Itemを使っても簡単に実装できますが、ここではプレファブを使いながら自分で手を組み立てていく方法をまとめます。


Building BlocksのThrowable Item

1. 手を用意する

まず、UnityプロジェクトにMeta XR Core SDKMeta XR Interaction SDK OVR Integrationをインストールします。

https://assetstore.unity.com/packages/tools/integration/meta-xr-core-sdk-269169

https://assetstore.unity.com/packages/tools/integration/meta-xr-interaction-sdk-ovr-integration-265014

新規作成したシーンに、OVRCameraRig(Packages/Meta XR Core SDK/Prefabs/OVRCameraRig.prefab)をドラッグ&ドロップします。
このOVRCameraRigの配下にあるLeftHandAnchor(OVRCameraRig/TrackingSpace/LeftHandAnchor)およびRightHandAnchorの下に、OVRHandPrefab(Packages/Meta XR Core SDK/Prefabs/OVRHandPrefab.prefab)をドラッグ&ドロップします。

RightHandAnchorの下のOVRHandPrefabの、OVR Hand > Hand TypeHand Rightに設定しておきます。

次に、OVRCameraRigの下にOVRInteraction(Packages/Meta XR Interaction SDK OVR Integration/Runtime/Prefabs/OVRInteraction.prefab)をドラッグ&ドロップします。さらに、OVRInteractionの下にOVRHands(Packages/Meta XR Interaction SDK OVR Integration/Runtime/Prefabs/OVRHands.prefab)をドラッグ&ドロップします。

このままだとOVRHandPrefabとOVRHandsの両方が手として表示されてしまうので、OVRHandPrefabによる手の表示を削除します。そこで、OVRHandPrefabの

  • OVR Skeleton Renderer
  • OVR Mesh
  • OVR Mesh Renderer
  • Skinned Mesh Renderer

を非アクティブにします。

2. 手でオブジェクトを掴んで投げられるようにする

まず、HandInteractorsLeft(OVRCameraRig/OVRInteraction/OVRHands/LeftHand/HandInteractorsLeft)およびHandInteractorsRightの下に、HandGrabInteractor(Packages/Meta XR Interaction SDK/Runtime/Prefabs/HandGrab/HandGrabInteractor.prefab)をドラッグ&ドロップします。

HandInteractorsLeftおよびHandInteractorsRightのBest Hover Interactor Group > Interactorsに先ほどのHandGrabInteractorを追加します。

これで、手がオブジェクトを掴めるようになりました。

次に、LeftHand(OVRCameraRig/OVRInteraction/OVRHands/LeftHand)およびRightHandの下にHandVelocityCalculator(Packages/Meta XR Interaction SDK/Runtime/Prefabs/VelocityCalculators/HandVelocityCalculator.prefab)をドラッグ&ドロップします。

HandVelocityCalculatorのHand Pose Input Device > HandLeftHandまたはRightHand(そのHandVelocityCalculatorの親となる手)を設定します。

先ほどのHandGrabInteractorのHandGrabInteractor > Optionals > Velocity Calculatorに、今ドラッグ&ドロップしたHandVelocityCalculatorを設定します(両手のHandGrabInteractorに設定するのを忘れずに)。

(おそらくですが)これによって手の速度が計算されるので、手がオブジェクトを離した時の速度に基づいて離された後のオブジェクトの軌道を計算できるものと思われます。

3. オブジェクトが掴まれるようにする

手に掴まれるオブジェクトとして、ここではCubeを作成します。作成したCubeに以下のコンポーネントを追加します。

  • Rigidbody
  • Grabbable
  • Physics Grabbable
  • Hand Grab Interactable

Hand Grab Interactable > Optionals > Physics GrabbableにCube自身のPhysics Grabbableを設定します。

おわりに

以上の作業で、下のようにオブジェクトを手で掴んで投げられるようになります!

参考リンク

https://developer.oculus.com/documentation/unity/unity-isdk-throw-object/

GitHubで編集を提案

Discussion