以下のような状態を目指します。
・自分が動くことができる
・コントローラーが表示されている
・rayでUIにinteractすることができる
たぶんこれが一番早いです
環境
Unity 2021.3.29
-
Meta XR Core SDK 68.0.3
Quest向けに開発するSDK -
Meta XR Simulator 68.0.2
UnityのGame上でVRの動きを確認できるシミュレーター -
Meta XR Interaction SDK 68.0.0
インタラクト系のSDK
実機:MetaQuest3
コントローラーの設定
・OVRPlayerControllerをシーンに追加します。
プロジェクトウィンドウ内で検索する時はSearch範囲をIn Packagesにしないと出てこないので注意です。
とりあえずこれだけで、動くことができるようにはなります。
でもコントローラーが表示されないのでUIへの接触ができません。
・次にOVRInteractionComprehensiveを、先程追加したOVRPlayerController直下に置きます。
・OVRInteractionComprehensiveを選択すると、OVR Camera Rig Refコンポーネントがあることが確認できます。
Ovr Camera Rigの項目に、OVRPlayerController内のOVRCameraRigを設定します。
これでコントローラー側の設定は終わりです。
UI側の設定
今から説明することは、Meta XRInteraction SDK内に含まれているFlatUnityCanvasゲームオブジェクトと構造が全く一緒なので、動き確認などしたい方はこちらを参照することをおすすめします。
・まずいつものようにHierarchyにButton UIを追加します。
この記事ではこれを"Canvas"オブジェクトとネームしておきます。
・Render ModeをWorld Spaceに変更します。
・Event CameraにはOVRPlayerController > OVRCameraRig > TrackingSoace > CenterEyeAnchorを入れておきます。
・"Canvas"オブジェクトにPlaneSurfaceコンポーネントを追加します。
こんな感じになるはず
・次に"Canvas"オブジェクトの親に空のゲームオブジェクトを追加します。
ここでは"StartMenu"とリネームしております。
・親の"StartMenu"にはPointableCanvasとRayInteractableコンポーネントを追加します。
・RayInteractableコンポーネントのPointable ElementにStartMenu(自身のGameObject)を設定します
・次にStartMenuの直下に空のゲームオブジェクトを追加して"Surface"とリネームしておきます
・"Surface"オブジェクトにはClipped Plane SurfaceとBounds Clipperコンポーネントを追加します。
・Clipped Plane SurfaceのPlane SurfaceにはCanvasを、ClippersにはSurfaceを入れます。
概念図としては以下のような感じになります。
■Startmenu(ゲームオブジェクト)
・Pointable Canvas(コンポーネント)
・Ray Interactable
■Canvas
・Canvas
・Canvas Scaler
・Graphic Raycaster
・Plane Surface
■Button(ここはいじってないので説明省略)
■Surface
・Clipped Plane Surface
・Bounds Clipper
Plane Surfaceだけの状態ではUIの接触範囲がPlane上に無限に広がってしまうんです。
それをSurfaceゲームオブジェクトに追加したClipped Plane SurfaceとBounds ClipperでUIの接触範囲をクリップ(=制限している)したってことです。
参考
公式のマニュアルが分かりやすかったです。
ただし英語なので翻訳ツール推奨。
https://developers.meta.com/horizon/documentation/unity/unity-isdk-use-ray-with-ui?locale=ja_JP
日本語解説ならここが分かりやすかったです。
https://tks-yoshinaga.hatenablog.com/entry/quest-dev-ui