Raspberlyのブログ

Raspberlyのブログ

Unityネタをメインとした技術系ブログです。にゃんこ大戦争や日常なども。そろそろブログタイトル決めたい

【Oculus Touch開発メモ】物を掴む時、複数の物をまとめて掴む【Unity】

今回はOculus Touchの開発ネタをやっていきます。
Oculus Quest及びOculus Rift Sで使える内容です。

 

f:id:Raspberly:20191005005553j:plain

 

 

 

 

過去にOVR GrabberとOVR Grabbableで物を掴んだり投げるところまでやりました。

raspberly.hateblo.jp

 

しかし、これは1つのGrabbableしか掴むことができません。
なので小さい細々した物をまとめて掴むことができない難点があります。
そこで今回は、少し手を加えてこれを実現してみようと思います。

 

 

 

 

 

 

 

開発環境

Windows 10

Unity 2018.4.5f

Oculus Integration ver1.40

Oculus Quest

 

 

 

 

 

セットアップ

初めてVR開発をする方はこちらを参考にしてみてください

raspberly.hateblo.jp

 

 

OVR Multi Grabberの準備

あらかじめGitHubから、OVRMultiGrabber.csをダウンロードしておきます。

github.com

 

 

 

 

アプローチ

複数の物をまとめて掴ませたい場合、GrabberとGrabbableどちらかを改造する必要がありますが。

今回はOVR Grabberを継承して独自クラスを実装していきます
(OVR Grabberがアセット更新されていくことを考えるとできるだけ依存したくないため継承はしません)


ただし、「まとめて掴めるオブジェクト」と「まとめて掴ませたくないオブジェクト」の2つを共存させたい場合、少し面倒かもしれません。
動的に通常のOVR Grabberと切り替えたりする、またはGrabbable側にも手をつけたりする必要があります。

 

通常のOVRGrabberが範囲内のGrabbableを検索し、一番近いものを掴むのに対し、
MultiGrabberは範囲内のGrabbableを全て掴む処理を入れています。

 

 

 

 

 

主要コンポーネント

OVR Multi Grabber

物を掴む側、つまり手にアタッチするコンポーネントです。

 

 

 

サンプルシーンの確認

Assets/SampleFramework/Usageに様々なサンプルシーンがあります。
学習や挙動の確認にとても有益です。見てみましょう。

今回はお馴染みAvaterGrabシーンを使っていきます。

f:id:Raspberly:20191005002448p:plain

 

【追記】 2020/02/18

AvatarGrabシーンが削除されました。詳しくはこちら。

raspberly.hateblo.jp

 

 

 

 

実際にやってみる

Grabbableオブジェクトの準備

掴まれる側オブジェクトの準備。
準備といっても、Grabbableコンポーネントの変更はありません。
複数掴ませたいので小型のキューブを適当に複製しておきましょう。

f:id:Raspberly:20191004234200p:plain

 

 

 

Gerabber側の準備

予め用意しておいた、OVRMultiGrabberを手のオブジェクトにアタッチします。
(手とは、OVRGrabberやHandがアタッチされているオブジェクトです)

f:id:Raspberly:20191005000344p:plain

この時、OVRGrabberとOVRMultiGrabberは競合するので、OVRGrabberを非アクティブにしておきます。

 

OVRMultiGrabberのインスペクターパラメータ

ほとんどOVRGrabberと同じです。
GripTransformやGrabVolumeも同じように設定してあげましょう

 

これで完成です。

f:id:Raspberly:20191005003935g:plain

 

 

 

 

 

使い道

パッと思いつくものですと、節分での豆まきくらいでしょうか。

 

しかし複数のオブジェクトを掴むVRを作品をあまり見ないような気がします。
もしかしたら需要がないのかも。。。

 何かアイデアをお持ちの方はぜひお試しください!

 

 

 

 

課題点

現状掴んだオブジェクトを投げると、全て同じ方向に飛んでいきます
これは見栄え的にはよろしくなく、掴んだオブジェクトはいい感じにバラけて飛んでもらいたいところです。

解決方法がわかる方はぜひPullRequestやブログのコメントなどに教えていただけると幸いです。

 

 

 

 

 

まとめ

・複数の物を掴むためにOVR MultiGrabberを作成しました。

・OVRGrabberの代わりにOVRMultiGrabberをアタッチするだけです。

・Grabbable側は特に変更ありません。

・現状投げる時の挙動に少し問題がある。

 

 

 

 

 

 

他間違っている箇所がありましたらコメントにお願いします。