VR物体を掴む [OVR Grabbable / Grabber 編]

何番煎じって感じではありますが.
Oculus Integration の OVR Grabbable / Grabber を利用して,VR物体を掴む方法の手順.

手順

掴まれる物体への準備

Rigidbodyをつける

物体が剛体であることが保証できなければ掴めないはず.

この時,物体を落としたくない場合はUse GravityfalseIs Kinematictrueに設定する.
物体を放り投げたい場合は,Use GravitytrueIs Kinematicfalseに設定する.

Colliderをつける

Mesh Colliderがあれば,それをそのまま使ってもよい.
ただし,掴める部分を限定したい場合は,その範囲にBox ColliderSphere Colliderを取り付ける.
Is Triggerfalseにする.

OVR Grabbableをつける

OVR Grabbableスクリプトをつける.
Allow Offhand Grabtrueにして,それ以外はfalse(オプションとして各々をtrueにしてもよい)
Grab Pointsは掴める部分を限定したい場合はsizeを設定して,掴む部分のColliderを設定する.

最終的にはこんな感じ.

f:id:xrdnk:20200505232900p:plain

掴む役割を与えたい物体への準備

まあ,手とか.
Oculus Integration 14.0 以上の環境ならば,CustonHandLeftCustomHandRightにデフォルトで,
OVR Grabberスクリプトがついていますが,デフォルトの設定のままだとまずい部分があります.

Parent Held Object を true にする

デフォルトでは,Parent Held Objectfalseになっております.
この場合だと,掴まれる物体がOVR Player Controllerのコライダと衝突するために完全に掴む状態にならない.
Parent Held Objecttrueにすることで,掴まれる物体が我が子になり,手に完全にフィットする状態になる.

実際に掴んでみる

ほうきを掴んでみた.

f:id:xrdnk:20200505235904g:plain