UnityでMeta Questの開発していると、コントローラーからレーザーポインターみたいなものを出して、中空に浮くUIを操作したいという、よくある欲求を満たす方法です。Prefabが準備されているのですぐできます。
過去記事を調べていくとoculus-samples/Unity-StarterSamples のUIHelperを利用するものが多かったのですが、片手でしか操作できないことや、cloneしてくるのが手間だったり、表現の観点でもMeta Quest標準のポインターと比べるといまいちだななどと思っていました。デフォルトで使えるものがあるのではないかなと思って調べていると、Meta XR Core SDKに含まれているOVRRayHelperがあり、これを利用することで早く簡単に良いものができたので、その紹介です。
前提
- Windows11(基本Macでも同じです)
- Unity 6.1 (6000.1.7f1)
- Meta XR All-in-One SDK 77.0.0
手順
UnityでMeta Quest開発ができる状態になっている前提です。そこまで行けてない人はMeta Quest 3で開発する、はじめの一歩を参照ください。
レーザーポインターを出す設定
-
OVRCameraRig配下にあるLeftHandAnchorにMeta XR Core SDKに含まれるOVRControllerPrefab(①)、OVRRayHelper(②)を追加します。
注意:それぞれのPositionが0, 0, 0に設定されていないと、プレイしたときに手からコントローラーやレーザーポインターがずれます。 -
OVRControllerPrefabのOVRControllerHelperの設定変更します。ControllerをL Touch(①)に、RayHelperをOVRRayHelper(②)に設定します。
-
同じ要領で、RightHandAnchorも配置、設定します。こちらはR Touchです。
確認するためのGUIの設定
基本的なUnityのUI追加の手順は割愛し、Meta Questで使用するために必要な手順だけにしています。
-
Canvasを追加して、Render ModeをWorldSpace(③)に変更します。そのままだと大きすぎるので、Scale(②)や位置(①)を調整してください。以下サンプルです
-
CanvasのGraphic Raycasterを無効化(①)して、Add ComponentからOVR Raycasterを追加(②)します
-
EventSystemのInput System UI Input Moduleを無効化(①)し、OVRInputModule(②)を追加します
-
後はCanvasにUIを設定すれば、操作可能です