【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」にチェックを入れておくと良し。
掴んだタイミングでコントローラが非表示になるけど、持ち上げることが出来た。
コントローラの表示/非表示しないのは、「Hide Hand On Attach」です。
「Hand Follow Transform」は掴んだ物の方向と手の向きが一致するようになるので、合わせて試してみるとわかりやすいです。
尚、アタッチするのが「Interactable」だけだと持ち上げることができず、触るだけになります。
自分の身体にぶち当たる
ここまでで、動かして色々と試していたところ、自分の身体のBodyColliderにぶつかってしまいます・・・
これは前回の移動で作った「壁にめり込まない」処理のせいで、壁にめり込まないようにするため、自分(Player)の位置を変えてるからです。
壁も物も結局障害物なので、壁と同じ挙動をしてしまいます・・・
なわけで、掴んでいる物はぶつからないようにする為、掴んでいる間は掴んでいる物のColliderの「isTrigger」を有効にすることにします。
新しく「ColliderChanger.cs」を作って、以下のようなスクリプトにしました。
「OnHandHoverBegin」・「OnHandHoverEnd」・「OnAttachedToHand」・「OnDetachedFromHand」はいずれも、「Interactable」から呼ばれるので、「Interactable」をアタッチしたオブジェクトにアタッチしてください。
「OnAttachedToHand」が掴んだ時、「OnDetachedFromHand」が離した時に呼び出されます。
尚、ホントに必要なのは「OnAttachedToHand」・「OnDetachedFromHand」の「GetComponent」の行で、「OnHandHoverBegin」・「OnHandHoverEnd」とDebug文は挙動を見たかったから入れてるだけです。