以前Building BlockのPoke機能を使ってのUI入力はやった
このときはuGUIで作ったUIへの入力がうまくいかなかったが、InteractionSDK内に公式uGUI操作サンプルを見つけたのでそれをもとにやる。
この記事の時に見つけた。
Poke
PokeExample

カーブとフラットの二つのuGUIキャンバスがあった。フラットのほうがシンプルだしフラットでいいのでそちらを見る
Canvasの親にPokeInteractableなど3つついてる。EventWrapperはEvent使わないならいらない。

普通のCanvasにPlaneSurfaceというのがついている。テレポートの時も使ったな~

Surface

自分のシーンへ
FlatUnityCanvasをプレハブ化して、以前Pokeを実装した自分のシーンにもっていったらすぐに動いた。

でも別のPokeを実装してないシーンにもっていっても動かない。
OVRInteractionはあって、HandPokeInteractorもあって、CameraRigの下にはOVRHandもあって手は表示されるのにな~

よくわからないけどHandRayInteractorを追加したら動いた。関係ないかも


コントローラーではできないかと思ったら、次の章でRayを追加したおかげかわからないけどコントローラーの白い丸のところで押せた。

Ray
RayExample
前も書いたが、PokeよりRayのほうがUIの置き場所が自由で使いやすそう。QuestのハンドトラッキングのRayはちょっと精度が悪くて使いにくいけど
RayExampleにあるUIもuGUIを使っているものだった

UnderlayとAlphaCutoutの違いはよくわからない・・・AppLabので実機でも見たけど何が違うんだろう

MeshについているRenderingModeでかえれる

PointableCanvasModuleというのもいるのかな?

自分のシーンへ
以前BuildingBlockのPointableItemを置いたシーン(Pokeと同じシーン)にPointableCanvasModuleとCylinderごと置いたら動いた。

でもその下のCanvas単体(OculusInteractionSamplesRayCanvas)を置いても動かない・・・
細かく見たらMeshというところにCylinderをセットする必要があった

これで反応するようになった。
別のシーンにもっていってOVRInteractionの下にHandRayInteractorを追加したら動いた


あとコントローラーでもRayを出すためにここにこれを入れる

できた

これでこの記事の時実装したコントローラーからのRayもいらなくなった!metaデザインのRayを使える
2重
UIも変えたとき2重に表示されることがあった

Meshオブジェクトの位置にも表示されるらしい。Rayが反応するのはこちら。
Canvasの位置を0,0,0にしてMeshオブジェクト同じ位置にしたら治った。
もしくはCanvasについているこれをFixにしたら、Cameraからは表示されなくなった。シーン上では2重に表示される

最後に
結構プレハブが複雑で自分で一から作るという気になれない。
諸々デフォルトでuGUI対応したらいいのにな~
AppleVisionProなら勝手にいい感じになるんだろうな~