トマシープが学ぶ

Unity/VR/AR/デザイン好きのミーハー 記事内容は自分用のメモです

【Unity】QuestのハンドトラッキングでuGUIのUI入力【Poke&Ray】

以前Building BlockのPoke機能を使ってのUI入力はやった

bibinbaleo.hatenablog.com

このときはuGUIで作ったUIへの入力がうまくいかなかったが、InteractionSDK内に公式uGUI操作サンプルを見つけたのでそれをもとにやる。

この記事の時に見つけた。

bibinbaleo.hatenablog.com

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を使える

bibinbaleo.hatenablog.com

2重

UIも変えたとき2重に表示されることがあった

Meshオブジェクトの位置にも表示されるらしい。Rayが反応するのはこちら。

Canvasの位置を0,0,0にしてMeshオブジェクト同じ位置にしたら治った。

もしくはCanvasについているこれをFixにしたら、Cameraからは表示されなくなった。シーン上では2重に表示される

 

最後に

結構プレハブが複雑で自分で一から作るという気になれない。

諸々デフォルトでuGUI対応したらいいのにな~

AppleVisionProなら勝手にいい感じになるんだろうな~