XR Interaction Toolkitで指定した物を掴む
コントローラーが示した物体を掴めるようにします。コントローラーで掴めるようにするには、掴まれる物体にXR Grab Interacableコンポーネント、コントローラーにXR Ray Interactor又はXR Direct Interactorコンポーネントを設定する必要があります。
XR Ray Interactorは、コントローラーから線(Ray)を伸ばして線が当たった対象を掴みます。XR Direct Interactorは、コントローラーが当たったものを掴みます。
ここでは、XR Ray Interactorを使用して、コントローラーから出ている赤い線が示した物体を掴めるようにします。
環境
Unityバージョン:2020.3.11f1
XR Interaction Toolkit:1.0.0-pre.4
Oculus Quest2: v29 ソフトウェア (※)
※Oculus Quest2のテスト機能である「VRにデスクを持ち込もう」を有効にしていると自作プログラムが動作しませんでした。
回避方法はあると思いますが、確認できていません。
プロジェクトの作成及び設定
以前の記事「XR Interaction Toolkitで移動する - プロジェクトの作成及び設定」を参考にしてください。
プログラムの作成
■VR用カメラの作成
VR ヘッドセットと同期をとって動作するカメラを作成します。
Hierarchyビューを右クリックして表示されるコンテキストメニューからXR > XR Rig (Action-based)を選択します。HierarchyビューにXR RigとXR Interaction Managerが作成され、デフォルトで存在したMain Cameraが削除されます。
作成されたXR Rigを選択し、InspectorビューのXR RigコンポーネントのTracking Origin Modeを「Floor」に設定します。これで、VRヘッドセットの現実世界の高さとシーン内の高さが一致するように動きます。指定した高さに固定したい場合は、「Device」に設定します。
■床の作成
Unityの3Dオブジェクトで、シーン内に床を作成します。
Hierarchyビューを右クリックして表示されるコンテキストメニューから3D Object > Planeを選択します。HierarchyビューにPlaneが作成され、Sceneビューに床が表示されます。
■掴む物体を作成
仮想空間上で、掴む対象を作成します。Unityの3Dオブジェクトで作成します。正六面体(Cube)と球(Sphere)と円柱(Cylinder)を作成します。
正六面体(Cube)を作成します。
Hierarchyビューを右クリックして表示されるコンテキストメニューから3D Object > Cubeを選択します。作成されたCubeを選択し、InspectorビューのTransformコンポーネントのPositionのYを「1」、Zを「1.5」、ScaleのX、Y、Zを「0.2」に設定します。
球(Sphere)を作成します。
Hierarchyビューを右クリックして表示されるコンテキストメニューから3D Object > Sphereを選択します。作成されたSphereを選択し、InspectorビューのTransformコンポーネントのPositionのX、Y、Zを「1.5」「1」「1.5」、ScaleのX、Y、Zを「0.2」に設定します。
円柱(Cylinder)を作成します。
Hierarchyビューを右クリックして表示されるコンテキストメニューから3D Object > Cylinderを選択します。作成されたCylinderを選択し、InspectorビューのTransformコンポーネントのPositionのX、Y、Zを「-1.5」「1」「1.5」、ScaleのX、Y、Zを「0.2」に設定します。
■掴む物体へXR Grab Interacableコンポーネントの設定
掴む物体へXR Grab Interacableを設定します。作成したCube、Sphere、Cylinderに対して設定します。
HierarchyビューのCubeを選択し、Inspectorビューの「Add Component」ボタンからXR Grab Interacableコンポーネントを追加します。XR Grab InteracableコンポーネントとRigidbodyコンポーネントが追加されます。
同様に、SphereとCylinderに対しても同様にコンポーネントを追加します。
■Input Action Managerの作成とコントローラーの設定
Input Action Managerの作成とコントローラーへのアクションのマッピング情報の設定は、以前の記事「XR Interaction Toolkitで移動する - プログラムの作成」の「Input Action Managerの作成」「コントローラーの設定」を参考にしてください。
■コントローラーへXR Ray Interactorの設定
XR Ray Interactorコンポーネントは、デフォルトでLeftHand ControllerとRightHand Controllerに設定されています。
HierarchyビューのXR Rig > Camera Offset > LeftHand Controllerを選択し、InspectorビューをみるとXR Ray Interactorコンポーネントが設定されているを確認する事ができます。
ここでは、左右のコントローラーで物体を掴んだ時の動きを変える為に、LeftHand ControllerのXR Ray InteractorコンポーネントのForce GrabのチェックをOffにします。Force GrabがOnの場合、物体を掴んだ時にコントローラーに引き寄せられます。Offの場合は、その場で掴む事ができます。
実行
保存(File > Save)してから、Oculus Quest2が接続されている事を確認し、Build And Run(File > Build And Run)を実行します。
コンパイルが開始され、コンパイル終了後に接続されているOculus Quest2にプログラムが自動転送され実行されます。
目の前に、左から、円柱、正六面体、球が並んでおり、コントローラーの先から伸びている赤い線(Ray)を当てると、線が白色に変わります。これが選択している状態です。この状態で、グリップを押下すると選択している物体を掴む事ができます。
右側のコントローラーでは、物体を掴むとコントローラーが引き寄せられますが、左側のコントローラーでは、その場で掴むことができます。
終わりに
これで、仮想空間上の物体を操作できるようになりました。仮想空間上で操作できることが増える毎に没入感が高まっていく気がします。
将来の自分への備忘録、ついでに誰かの何かのきっかけになれば幸いです。