VR日記その5 -unityで物をつかみたい

前回の記事で枕投げがしたいと書いたな。まずは物をつかむところからだ…ということで実装しようとした記録。記事を見ると簡単そうだがなぜか詰まった。

--------

目次

①手が出ないしつかめない

②つかめるようになった…けど動かないものがある

③ちょっと遊んでみた

--------

①手が出ないしつかめない

まず初めに参考にした記事を紹介。

基本的にはこの記事の通り、掴む方にOVR Grabberを、掴まれる方にOVR Grabbleを実装するというのが流れ。

しかし何にOVR Grabberを実装するのか?という点が分からなかったためにハマった。記事で紹介されているAvatarGrabシーンを再生してもなぜか手が出てこない。当然自分で作ったシーンにAvatarGrabberプレハブを持ってきても手が表示されない。ならば、とOVRHandPrefabやOVRCustomHandPrefabを持ってきて、OVR Grabberを追加しても失敗。

ならば、とOclus>SampleFramework>Usage内にあるDistanceGrabのDistanceGrabHandプレハブを移植。DistanceGrabberスクリプトを外しOVR Grabberを追加した。使用しているのはOclusQuestの上、手の形のアバターを使用しているためControllerはL Handかと思いきやそれでは動かず、L Touchを指定してようやく動くようになった。

キャプチャ

…こんな感じに。

何がいけなかったかというと、DistanceGrabHandプレハブをOVRCameraRigの外に置いていた。おそらくだが、中に入れないとコントローターの位置が上手く拾えないのだと思う。最終構成は以下の通り。

キャプチャ

余談だが、この記事を書いているときにこんな記事を見つけた。

この記事の内容は未検証だが、もしかしたらHandスクリプトに手を加えると手が出るようになるかもしれない。(こちらが王道?)

②つかめるようになった…けど動かないものがある

手の方はこれでOK。つかむ対象に関しては特に複雑なことはなく、Collider、Rigidbody(UseGravityはチェックを入れる)、OVR Grabbleを使用すれば良い。ただし、ベッドなど出来合いのアセットにOVR Grabbleを使うときは注意が必要で、Staticにチェックが入っていると持てるはずなのに持てないという現象が発生する(オブジェクト位置が固定されるため)。

最終的にできたのがこちら。

※動画ではUnityちゃんにベッドを投げているが悪意はない。念のため。(むしろベッドで微動だにしないUnityちゃん強い。)

③ちょっと遊んでみた

筆者は高校、大学とジャグリング部に所属していた。VRで物が投げられるとなればやることは一つ。ボールジャグリングである。

しかし悲しいかな、現段階では全くできなかった。ボールが思った方向に投げられない(特に真上)のと、取るタイミングと場所が非常にシビアであることが原因だと思われる。特に後者は致命的で、現実ではボールの落下する場所に手を差し出すだけで取れるものが、VR上ではボール取る瞬間にトリガーを押す必要がある。この問題はハンドトラッキングをうまく活用できれば解決するのだろうか。いずれにせよ今の技術では不可能であった。

枕投げゲームを作るといっていてとんでもない寄り道をしているが果たして帰ってこれるのか。やってみたいことが多すぎる。Unity制作の旅は続く。

この記事が気に入ったらサポートをしてみませんか?