時代はコントローラーレス!!
コントローラーを使わず、ハンドトラッキングによるハンドジェスチャーだけで仮想空間内を移動&回転したい
今のところアプリづくりにMetaXRSDKしか使ってないので、その機能だけで作れると嬉しい・・・
あと本当はコントローラーを使いたくない理由としては、アバターに憑依するときに指の動きなどを反映したいからだから、指輪型の小さいデバイスとかでもいいんだが
サンプル
FirstHand
唯一知っている事例は最近Quest3発売に合わせてMetaが正式に出したFirstHandアプリ内の移動ジェスチャー
この中で移動・回転があって感動した。初めてハンドジェスチャーで移動した。
Firat Handの移動 pic.twitter.com/PVujkAz3qr
— トマシープ (@tomasheep) 2024年1月30日
ちなみにこの部分以外も初めのパススルーと組み合わせてポータルが開くところとかめっちゃクオリティ高くて楽しい。
昔からFirst Handというアプリはあったけどたぶん進化している?
昔のFirstHandバージョンはソースコードもあったらしいが見たら2年前で更新終わってた
Interaction SDK
でもInteraction SDKのページを見たらサンプルの中に移動とかスナップあるらしい!
サンプルはInteraction SDK SamplesがAppLabで出てる!
遊んだけどいろいろサンプルあってすごい面白かった!!!!
移動はFirstHandと同じ方式。いまいちテレポートの発動の仕方がわからない・・・
Interaction SDK のサンプルアプリがAppLabにあった! pic.twitter.com/4HPkcRWEme
— トマシープ (@tomasheep) 2024年1月30日
そして今回の記事には関係ないけど移動以外にもいろいろある。
RayでのUI選択や
PokeのuGUI!これ前試してできなかったたやつだ!サンプルここにあったのか
あと面白かったのは自分のポーズを目の前のフィギュアがしてくれるやつ。ちゃんと身長も反映されている?
Move Fast
ちなみにMove Fastというサンプルアプリもある
https://www.meta.com/ja-jp/experiences/6087525674710349/
こちらはGithubもあって4か月前の更新
でも遊んだらこちらはボクシングの音ゲーみたいなやつだった。めちゃクオリティ高いけど移動はない
Unityで実装
InteractionSDKのサンプルはUnityAssetStoreにもあった。
入れた
All In Oneパッケージの中にはサンプルはなかったのか。フェイストラッキングのサンプルが入ってたMovementと同じような感じかな?ちょっと形式が違うけど
AppLabにあったシーンが一通り入っている
その中のLocomotionExampleが今回のターゲット
どれが最低限必要な要素なんだ・・・
NavMeshいるのか?青い範囲しかテレポートできなかったけど。
ドキュメントページが見れない
と思ったが左上のプラットフォームを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
NavMeshの作成には床にしたい場所のオブジェクトのStatic状態をNavigation Staticにするって書いてた。けど選べない
最後に
途中で気づいたけど私がしたい移動はテレポート移動じゃなくてスーって動くジョイスティック移動?だった
それはそれでUI難しい。
走るときのように腕を振ったら移動するというサンプルがGodotにあるはずなのでそれできるとよさそう。Metaにもないかな~