トマシープが学ぶ

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

Questのハンドジェスチャーでテレポート移動と回転【Unity】

時代はコントローラーレス!!

コントローラーを使わず、ハンドトラッキングによるハンドジェスチャーだけで仮想空間内を移動&回転したい

今のところアプリづくりにMetaXRSDKしか使ってないので、その機能だけで作れると嬉しい・・・

 

あと本当はコントローラーを使いたくない理由としては、アバターに憑依するときに指の動きなどを反映したいからだから、指輪型の小さいデバイスとかでもいいんだが

bibinbaleo.hatenablog.com

サンプル

FirstHand

唯一知っている事例は最近Quest3発売に合わせてMetaが正式に出したFirstHandアプリ内の移動ジェスチャー

www.meta.com

この中で移動・回転があって感動した。初めてハンドジェスチャーで移動した。

ちなみにこの部分以外も初めのパススルーと組み合わせてポータルが開くところとかめっちゃクオリティ高くて楽しい。

 

昔からFirst Handというアプリはあったけどたぶん進化している?

www.moguravr.com

昔のFirstHandバージョンはソースコードもあったらしいが見たら2年前で更新終わってた

github.com

Interaction SDK

でもInteraction SDKのページを見たらサンプルの中に移動とかスナップあるらしい!

developer.oculus.com

サンプルはInteraction SDK SamplesがAppLabで出てる!

www.meta.com

遊んだけどいろいろサンプルあってすごい面白かった!!!!

移動はFirstHandと同じ方式。いまいちテレポートの発動の仕方がわからない・・・

そして今回の記事には関係ないけど移動以外にもいろいろある。

RayでのUI選択や

PokeのuGUI!これ前試してできなかったたやつだ!サンプルここにあったのか

bibinbaleo.hatenablog.com

あと面白かったのは自分のポーズを目の前のフィギュアがしてくれるやつ。ちゃんと身長も反映されている?

Move Fast

ちなみにMove Fastというサンプルアプリもある

https://www.meta.com/ja-jp/experiences/6087525674710349/

こちらはGithubもあって4か月前の更新

github.com

でも遊んだらこちらはボクシングの音ゲーみたいなやつだった。めちゃクオリティ高いけど移動はない

Unityで実装

InteractionSDKのサンプルはUnityAssetStoreにもあった。

assetstore.unity.com

入れた

All In Oneパッケージの中にはサンプルはなかったのか。フェイストラッキングのサンプルが入ってたMovementと同じような感じかな?ちょっと形式が違うけど

bibinbaleo.hatenablog.com

AppLabにあったシーンが一通り入っている

その中のLocomotionExampleが今回のターゲット

どれが最低限必要な要素なんだ・・・

NavMeshいるのか?青い範囲しかテレポートできなかったけど。

ドキュメントページが見れない

developer.oculus.com

と思ったが左上のプラットフォームをUnityにしたら表示された

ドキュメントによると「テレポート インタラクションは、TeleportInteractorとTeleportInteractableという 2 つのコンポーネントで構成されます。」

これはコントローラーの時もそうだった気がする。

そしてHandの場合、TeleportInteractorはここにあった!

Turnも同様

OVR Interaction配下を自分のシーンに置いたらいいのかなと思ってOVRCameraRigtとかアバターとかいろいろ入っているシーンにおいたけど、自分の手の形も出なかった;;

 

InteractionRigOVR-Syntheticごと新しいシーンに置いたら手も出て、回転もできた!

テレポートもUIは出た。でもPlaneだけだと移動できる場所がないのか赤いレイが出るだけで移動できない。床の設定方法は後述

 

OVRCameraRigがあらあじめ置いてあるシーンで、OVRCameraRigのHandAnchorの下にOVRHandPrefabを置いておくと動いた。OVRMeshはオフにしておかないと2重で手が描画される。

確かにサンプルのほうのCameraを見てもOVRHandが置いてあるな~

これで一応自分のシーンでも移動と回転ができるようにはなった。

でも回転の決定で親指と人差し指をタップする動作が、たぶんAボタンにかぶっていて、もともとAボタンに設定していた操作も反応するようになった;;

まあハンドトラッキングオンリーで行くならその操作もどうにかしないといけないからしょうがないのか。

Teleport Interactable

移動するための床側に必要なTeleport Interactableに設定するSurfaceには3種類設定できるらしい

コライダーとPlaneとNavMesh

plane

Planeは普通の3DオブジェクトのプレーンじゃなくてPlaneSurface。AllowTeleportはオフにして、TileBreakerStoreは-100だって

これでこの格子が表示されてテレポートのレイは反応するようにはなったけど、AllowTeleportしていないのでテレポートできない

なんでAllowTeleportしてはいけないんだろう・・・Plane上を移動したいのに

AllowTeleportにチェック入れたら移動できたからつけておけばいいのかな?

NavMeshの作成には床にしたい場所のオブジェクトのStatic状態をNavigation Staticにするって書いてた。けど選べない

docs.unity3d.com

最後に

途中で気づいたけど私がしたい移動はテレポート移動じゃなくてスーって動くジョイスティック移動?だった

それはそれでUI難しい。

走るときのように腕を振ったら移動するというサンプルがGodotにあるはずなのでそれできるとよさそう。Metaにもないかな~