以前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なら勝手にいい感じになるんだろうな~