この記事のゴール

前で作ったシーンではCubeは宙に浮いているだけで動かないので,掴んだり投げたりできるようにする.

MetaQuest3でVRデモ 1. VRゴーグルでUnity初期画面を映すの実装が完了している前提で説明しています.まだの場合はこちらをご覧ください.

オブジェクトを掴む・離す

手で操作

Cubeに右クリックし,Interaction SDK > Add Grab Interaction
セットアップウィザードは特に変更しない.CubeにTransformとRigidbodyが追加されていない場合はここで自動的に追加される.

Cubeの子として,ISDK_HandGrabInteractionが追加されている.

この状態でビルドすると,Cubeを手でつかむアクションをすることで掴め,手を離すアクションをすることで離れる.

補足:Interaction SDK > Add Distance Grab Interactionは手の届かない遠いオブジェクト対象だと思う

コントローラーで操作

Cubeに右クリックし,Interaction SDK > Add Ray Grab Interaction
セットアップウィザードは特に変更しない.上記のAdd Grab Interactionと混在しても問題なし.ただし,手かコントローラーか片方しか認識しないので,片手はコントローラー,もう片方はハンドジェスチャーは不可.

この状態でビルドすると,コントローラーのレイがオブジェクトに当たった状態で前ボタンを押すと掴め,ボタンから指を離すと離れる.

オブジェクトを投げる

上記と同様に処理して,CubeのInspectorのうち,Rigidbodyの設定を以下の通り変える.BoxColliderのIs Triggerはデフォルトではチェックされていないが,念のため確認.

  • Use gravityにチェック ※重力が適用される
  • Is Kinematicのチェックを外す ※これにチェックが入っていると,オブジェクトの移動はスクリプトによってのみ行われるので,重力による自由落下が発生しない

今のままでは起動時にオブジェクトが自由落下で奈落の底に落ちるので,地面に当たるオブジェクトを別に作る.Cubeを作って,Y方向のスケールを小さくすることで薄くすればいい.初期状態で付与されているが,Colliderのコンポーネントがいる.

この状態でビルドして,オブジェクトをつかんだ後投げるモーションをしながら離すと飛んでいく.