(この記事の使用環境: Unity5.5.0f3 Personal、Windows10、SteamVR Plugin 1.2.0、VRTK3.0.1)


今回はVR用アセット「VRTK」に収められているスクリプト「VRTK_InteractGrab」の概要を説明します。VRTKのセットアップ方法については前回記事を参照してください。

SnapCrab_NoName_2017-1-25_14-4-16_No-00

■公式サイトの解説

まずは公式サイトによる解説。これで用が足りる方は以下を読む必要はありません。
VRTK_InteractGrab · VRTK - Virtual Reality Toolkit  

以下、公式サイトの解説をざっくりと直訳または意訳したもの+若干の補足です。誤り等があれば指摘してもらえると大変ありがたいです。また、イベントおよびメソッドについての解説は省略していますので、それらは公式サイトを参照願います。

■概要

  • VRTK_InteractGrab スクリプトはコントローラーオブジェクトにアタッチする。(※旧バージョンとVRTK3.0.x ではセットアップ方法が異なります。VRTK3.0.xでのセットアップ方法については前回記事参照のこと)
  • 動かすために VRTK_ControllerEvents スクリプト、VRTK_InteractTouch スクリプトを必要とする。(※もしアタッチされていなければ、VRTK_InteractGrabスクリプトをアタッチした際にこれらも自動的にアタッチされる)
    SnapCrab_NoName_2017-1-26_10-11-3_No-00
  • つかむ対象のオブジェクトには VRTK_InteractableObject スクリプトをアタッチし、IsGrabbable のフラグをtrueにしておく必要がある(※インスペクタから設定できる)。正しく設定されたインタラクタブルオブジェクトは「Grab」ボタン(デフォルトでは「Grip」)を押すことでつかむことができ、Grabボタンを離すまで持っていることができる(※ と、いうのが基本。設定次第では一度掴んだらGrabボタンを離しても持ち続けるようにすることもできる)。
  • Grabボタンを離したとき、インタラクタブルオブジェクトをコントローラーを振った方向と振った速さに応じて投げる。
  • インタラクタブルオブジェクトはトリガーを有効にするためにコライダーと必要とし、持ち上げたり動かしたりするためにはRigidbodyを必要とする。(※実際にはオブジェクトにRigidbodyをアタッチしなくても、それっぽい動きをするようです。少なくともVRTK3.0.1では)

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

以下のような設定項目があります。
  SnapCrab_NoName_2017-1-26_9-58-3_No-00
  • Controller Attach Point: つかんだオブジェクトをコントローラーにくっつける位置。もしこの値が空白なら、SDKのデフォルト値が用いられる。
  • Grab Precognition: Grabボタンを(先行して)押してからコントローラーがつかみたいものにタッチするまでの(許容)時間。もしオブジェクトが高速で落ちているとき、人間の反応速度ではそれにあわせてグラブボタンを押してつかむのはすごく大変。この値を大きくすることで、コントローラーがオブジェクトにタッチしコリジョンが発生する前に先行してGrabボタンが押されていても、実際にタッチしたときにGrabボタンがまだ押されたままならつかむアクションが成功する。
  • Throw Multiplier: オブジェクトをぶん投げるときの速度にかかる乗数。
  • Create Rigid Body When Not Touching: これがチェックされて、かつコントローラーがインタラクタブルオブジェクトに触れておらず、グラブボタンが押されているとき、リジッドボディがコントローラーに付け加えられる。コントローラーが他のリジッドボディオブジェクトにぶつかるように。

■関連するExamples

関連するExamplesについての解説記事です。

■VRTKのセットアップ方法および関連スクリプトの解説

VRTKのセットアップ方法および関連するスクリプトについての解説記事です。

今回は以上です。