トマシープが学ぶ

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

MetaXRSDKだけで、スティック移動・回転・uGUI入力・ボタン入力

サンプルを触ってやれそうな気がしてきたのでやる

bibinbaleo.hatenablog.com

既存のシーンに追加していく

スティック移動・回転

OVRPlayerControllerというプレハブが用意されていて、その下にOVRCameraRigも入っていた。でももういろいろ変更したCameraRigが既存のシーンにあるので、そのプレハブをUnpackして、OVRCameraRigを消して、既存のものに置き換えた

それだけで移動した!やった~

でもVRIKの歩行モーションはどう設定しても不自然だったので、Animationを用意したほうがよさそう。

qiita.com

回転の角度はRotationAmountかな?これを3にしたら90度回転している気がする

移動速度はacceleationかな?

こちら項目の解説があった

raspberly.hateblo.jp

Jumpは自分で呼び出すらしいけど、なんか見当たらない。スクリプトの中にはあるのに

uGUIのコントローラー入力(v62)

昔のシステムを使ってたら、Rayが途中で切れなくなったし、ポインターも表示されなくなった;;

試しにControllerDrivenHandPosesシーン見たら、なんか変わってた。決定したらカーソルの形も変わる。Questのネイティブのデザインと同じっぽい

OVRRayHelperというのが追加されて、いろいろいい感じになってた

OVRControllerPrefabについているHelperスクリプトにOVRRayHelperをセットする必要がある。これがないとポインターがうまく動かなかった

Canvas側は変わらない。RightControllerAnchorがはまっているから右手だけなのかと思いきや左手でも操作できた

Buttonに何かついてた。UIButtonSquishHelper

EventSystem

GazePointerはコントローラー使うならたぶんいらない。スクリプトオフにしても動いた

OVRManagerのControllerDrivenHandPosesTypeを変えている

 

これで自分のシーンに持ってきてOVRControllerHelperにセットしたら動いた。

 

これはOVRControllerHelperにセットしてなくてうまくいかず泣いてた時の画像

デザイン

そのままだとカーソルが大きかったので小さくした。

ただ、今回カーソルが2Dになっているが、UIが斜めになっているとうまく2Dが斜めになってくれない。常に地面に対して垂直

あとボタンによってカーソルが表示されないものがある。

前やっていたように3Dの球のほうがいいかな・・・

変えた。

これで常にカーソル表示されるしいい感じ!

クリックしたとき自動で小さくなった。

uGUIのコントローラー入力(v60)

基本この記事の通り

qiita.com

楽をするために、ControllerDrivenHandPosesシーンからGazePointerControls(LineRendererが含まれる)をプレハブ化して、持ってきた。

CanvasはGraphic Raycasterを消してOVR Raycasterを付ける。Pointerに手を設置

EventSystemも既存のInputModuleを消してOVRInputModuleを付ける。以下のように設定

JoyPadClickButton(=決定ボタン)は複数選べる。サンプルシーンの設定を持ってきた

あとOVRPointerVisualizerを適当なオブジェクトにつけて、LineRendereを設定すると、手からRayが出るようになる

最初のQiita記事の方がこれを編集してUIに当たった場所にGazeIconの子に設置した任意のポインターが表示できるようなコードを上げてくださっているのでそれを使った。

これで動いた~~

デザイン

あとLINERendereやGazeのSphereのデザインを編集していい感じにした。

LineRendereのColorって変更しても反映されないのか?Materialの色しか反映されない。

Materialの色を白にして、Colorでグラデーションを付けても反映されない。

あとGazeIconの先につけるSphereの大きさは0.5でちょうどよかった。実行するときLineRendereの幅に影響されるのかな?Colliderがあるとアバターがぶっ飛んだので取った

ControlsとGazePointerとEventSystemをまとめてプレハブ化したら少しは楽に使いまわせるだろうか?

ボタン入力

簡単にやるならController Buttons Mapperを適当なオブジェクトに付けてボタンとイベントを選択するだけ。