たこやき部屋

SteamVRを使って、Unityでゲームを開発したい

【VR】物を掴めるようにしてみる

Unity:2019.4.9f1
SteamVR Plugin:2.6.1 (sdk 1.13.10)

を使用して、手探りで作っています。



前回作った移動の続きです。
takoyakiroom.hatenablog.com

今度は物を掴む方法を探っていきます。

取り敢えず持てるようにしてみる

「Rigidbody」と、「SteamVR」→「InteractionSystem」→「Core」→「Scripts」の「Interactable」と「Throwable」持ち上げれる物にアタッチ。
一応これで完成です。必須じゃないけど「Rigidbody」は「UseGravity」にチェックを入れておくと良し。
f:id:takoyakiroom:20200915112447j:plain

掴んだタイミングでコントローラが非表示になるけど、持ち上げることが出来た。
f:id:takoyakiroom:20200915112926j:plain

コントローラの表示/非表示しないのは、「Hide Hand On Attach」です。
「Hand Follow Transform」は掴んだ物の方向と手の向きが一致するようになるので、合わせて試してみるとわかりやすいです。
f:id:takoyakiroom:20200915143810j:plain
f:id:takoyakiroom:20200915144816j:plain

尚、アタッチするのが「Interactable」だけだと持ち上げることができず、触るだけになります。

自分の身体にぶち当たる

ここまでで、動かして色々と試していたところ、自分の身体のBodyColliderにぶつかってしまいます・・・
f:id:takoyakiroom:20200915163537j:plain

これは前回の移動で作った「壁にめり込まない」処理のせいで、壁にめり込まないようにするため、自分(Player)の位置を変えてるからです。
壁も物も結局障害物なので、壁と同じ挙動をしてしまいます・・・

なわけで、掴んでいる物はぶつからないようにする為、掴んでいる間は掴んでいる物のColliderの「isTrigger」を有効にすることにします。
新しく「ColliderChanger.cs」を作って、以下のようなスクリプトにしました。

「OnHandHoverBegin」・「OnHandHoverEnd」・「OnAttachedToHand」・「OnDetachedFromHand」はいずれも、「Interactable」から呼ばれるので、「Interactable」をアタッチしたオブジェクトにアタッチしてください。

「OnAttachedToHand」が掴んだ時、「OnDetachedFromHand」が離した時に呼び出されます。

尚、ホントに必要なのは「OnAttachedToHand」・「OnDetachedFromHand」の「GetComponent」の行で、「OnHandHoverBegin」・「OnHandHoverEnd」とDebug文は挙動を見たかったから入れてるだけです。

デバッグするには

「手」の状態をデバッグする時は、「Player」→「SteamVRObjects」→「LeftHand」 or 「RightHand」の「Hand」の「Show Debug Text」にチェックを入れると、VR上から手の状態が確認出来ます。
「Show Debug Text」はコンソールに出力、その下の「Show Debug Interact」は・・・ちゃんと調べてません、何だろう?
f:id:takoyakiroom:20200915160150j:plain
f:id:takoyakiroom:20200915160712j:plain