結論
- ドラッグ&ドロップだけで作る方法 がある
- エディタ拡張も使えばさらに早く簡単にできる
この記事の内容で解決できること
- OVRGrabberでOVRGrabbable.snapOffsetを設定したオブジェクトを掴むと
オフセットがおかしいことになる(手から大きく離れる 等) - snapOffsetを作るためのパラメータ調整がめんどくさい。何かいい方法ないの?
OVRGrabbable.snapOffsetの抱える問題について
-
snapOffsetは掴みたい物の子オブジェクトを指定してもダメ
-
snapOffsetにアタッチするのは「掴んだときの手の位置」ではなく
「掴んだときのオフセット値を保持したGameObject」でないといけない。 -
しかもオフセット計算はWorldSpaceの位置と回転を使っているので、
どのオブジェクトの子にも入れておけない。(Oculusの使用例はPrefab化している)
-
-
上記を理解した上でオフセット値を作成するのが非常に大変
- 数値を調整しながら掴んで離してを繰り返す?そんなのやってらんないよ~
解決策
-
snapOffsetを使わない
RaspberlyさんのBlogでおススメされている方法
OVRGrabbableの子にモデルなどを入れて、それら子の位置を調整する -
OVRGrabberを書き換える
OVRGrabber側のオフセット計算の部分をちょっと書き換えて、
snapOffsetを「掴んだときの手の位置」として使えるようにする(参考記事) -
普通に作る
実は数値をいじらなくてもドラッグ&ドロップで作れる -
snapOffsetを作る機能を作る
オフセット値を計算するクラスとエディタ拡張を使ってチャチャっと作成する
本記事では3と4について解説します。
snapOffsetの作り方
を自動でやってくれるエディタ拡張
SnapOffsetHelper
手と物の位置合わせ以外は全部やってくれます。使い方はリンク先に画像付きで書いてあるので本記事では省略
動作環境
以下で動作を確認しました
- Unity2018.4.0f1
- Oculus Utilities v1.38.0, OVRPlugin v1.38.0, SDK v1.38.0
- Windows 10
- Oculus Rift