LoginSignup
9
5

More than 3 years have passed since last update.

【Unity】OVRGrabbableのSnapOffsetの作り方

Last updated at Posted at 2019-06-25

結論

この記事の内容で解決できること

  • OVRGrabberでOVRGrabbable.snapOffsetを設定したオブジェクトを掴むと
    オフセットがおかしいことになる(手から大きく離れる 等)
  • snapOffsetを作るためのパラメータ調整がめんどくさい。何かいい方法ないの?

OVRGrabbable.snapOffsetの抱える問題について

  • snapOffsetは掴みたい物の子オブジェクトを指定してもダメ

    • snapOffsetにアタッチするのは「掴んだときの手の位置」ではなく
      「掴んだときのオフセット値を保持したGameObject」でないといけない。
    • しかもオフセット計算はWorldSpaceの位置と回転を使っているので、
      どのオブジェクトの子にも入れておけない。(Oculusの使用例はPrefab化している)
  • 上記を理解した上でオフセット値を作成するのが非常に大変

    • 数値を調整しながら掴んで離してを繰り返す?そんなのやってらんないよ~

解決策

  1. snapOffsetを使わない
    RaspberlyさんのBlogでおススメされている方法
    OVRGrabbableの子にモデルなどを入れて、それら子の位置を調整する

  2. OVRGrabberを書き換える
    OVRGrabber側のオフセット計算の部分をちょっと書き換えて、
    snapOffsetを「掴んだときの手の位置」として使えるようにする(参考記事

  3. 普通に作る
    実は数値をいじらなくてもドラッグ&ドロップで作れる

  4. snapOffsetを作る機能を作る
    オフセット値を計算するクラスとエディタ拡張を使ってチャチャっと作成する

本記事では3と4について解説します。

snapOffsetの作り方

  1. OVRGrabbableのついたオブジェクト(Bat)に空のオブジェクトを作成する
    image.png

  2. OVRGrabberのついたオブジェクト(RightHandAnchor)の位置を掴んだときの位置に合わせる
    image.png

  3. 1.で作った空のオブジェクトをOVRGrabbableからOVRGrabberに移す
    (BatからRightHandAnchorに移動)
    image.png

  4. 3.の空のオブジェクトをPrefabにして完成
    image.png

  5. 作成したPrefabをOVRGrabbableのsnapOffsetにアタッチして完了
    image.png

  • こんな感じになります
    afede608223b1420f798be7bfeae3366.gif

を自動でやってくれるエディタ拡張

SnapOffsetHelper

image.png
手と物の位置合わせ以外は全部やってくれます。使い方はリンク先に画像付きで書いてあるので本記事では省略

動作環境

以下で動作を確認しました

  • Unity2018.4.0f1
  • Oculus Utilities v1.38.0, OVRPlugin v1.38.0, SDK v1.38.0
  • Windows 10
  • Oculus Rift

参考記事

9
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
5