1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

UnityでQuest向け開発 動いて、コントローラでUIのButtonを押したい

Last updated at Posted at 2024-10-13

以下のような状態を目指します。
・自分が動くことができる
・コントローラーが表示されている
・rayでUIにinteractすることができる
exp_PlayerController.gif

たぶんこれが一番早いです

環境

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をシーンに追加します。
image.png
プロジェクトウィンドウ内で検索する時はSearch範囲をIn Packagesにしないと出てこないので注意です。
とりあえずこれだけで、動くことができるようにはなります。
でもコントローラーが表示されないのでUIへの接触ができません。

・次にOVRInteractionComprehensiveを、先程追加したOVRPlayerController直下に置きます。
image.png

Hierarchyではこんな感じになります。
image.png

・OVRInteractionComprehensiveを選択すると、OVR Camera Rig Refコンポーネントがあることが確認できます。
Ovr Camera Rigの項目に、OVRPlayerController内のOVRCameraRigを設定します。
image.png

rayの位置とか微妙に違うけどデフォなので気にしません。
image.png

これでコントローラー側の設定は終わりです。

UI側の設定

今から説明することは、Meta XRInteraction SDK内に含まれているFlatUnityCanvasゲームオブジェクトと構造が全く一緒なので、動き確認などしたい方はこちらを参照することをおすすめします。
image.png

・まずいつものようにHierarchyにButton UIを追加します。
この記事ではこれを"Canvas"オブジェクトとネームしておきます。
・Render ModeをWorld Spaceに変更します。
・Event CameraにはOVRPlayerController > OVRCameraRig > TrackingSoace > CenterEyeAnchorを入れておきます。
・"Canvas"オブジェクトにPlaneSurfaceコンポーネントを追加します。
こんな感じになるはず
image.png

・次に"Canvas"オブジェクトの親に空のゲームオブジェクトを追加します。
ここでは"StartMenu"とリネームしております。
・親の"StartMenu"にはPointableCanvasRayInteractableコンポーネントを追加します。
・RayInteractableコンポーネントのPointable ElementにStartMenu(自身のGameObject)を設定します

・次にStartMenuの直下に空のゲームオブジェクトを追加して"Surface"とリネームしておきます
・"Surface"オブジェクトにはClipped Plane SurfaceBounds 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

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?