Meta XR SDKを使って、手でオブジェクトを投げられるようにする
はじめに
Meta XR SDKを使って、手でオブジェクトを投げられるようにする方法をメモします。Building BlocksのThrowable Itemを使っても簡単に実装できますが、ここではプレファブを使いながら自分で手を組み立てていく方法をまとめます。
Building BlocksのThrowable Item
1. 手を用意する
まず、UnityプロジェクトにMeta XR Core SDK
とMeta XR Interaction SDK OVR Integration
をインストールします。
新規作成したシーンに、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 Type
をHand 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 > Hand
にLeftHand
または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
を設定します。
おわりに
以上の作業で、下のようにオブジェクトを手で掴んで投げられるようになります!
参考リンク
Discussion