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


VR用アセット「VRTK」の Example 021_Controller_GrabbingObjectsWithJoints の解説です。
さまざまな方式でジョイントされたオブジェクトのデモです。
SnapCrab_NoName_2017-2-15_9-53-41_No-00

■公式サイトの解説 
VRTK公式サイトでこのExampleの解説文及び解説動画を見ることができます。ただし、動画に関してはVRTK旧バージョンのときに作られたものであり、VRTK3.0(以降)では設定等が異なっている場合があることに留意してください。動きを中心に見てもらえれば良いかと思います。

このExampleの解説動画



■VRTKのセットアップ方法および使用されているスクリプトの解説
適宜、以下の記事を参照願います。
  
■Exampleの解説
VRTK/Examples 内にある当該番号のシーンを呼び出すことで、デモを動かしてみることができます。

このデモシーンには、ジョイントで他のオブジェクトにアタッチされたさまざまなインタラクティブオブジェクトが配置されています。この Example は、オブジェクトをコントローラに接続する最適な方法を決定するために、インタラクタブルオブジェクトにさまざまな異なる接続機構を持たせることができることを示しています。

VRTK_FixedJointGrabAttach(固定ジョイント)は、キューブのようなオブジェクトを保持するのに適しています。(※ デフォルトで選択されています)
VRTK_TrackObjectGrabAttach はコントローラに追従するように動きます。
VRTK_SpringJointGrabAttach はドロワーにはうまく働き、操作時に自然なスライドを与えます。
最後に、VRTK_RotatorTrackGrabAttach はドアでうまく動作し、ドアのスイングを自然に制御します。また、このデモには関連する各部位を引っ張って異なる形状に操作できる Character Joint オブジェクトも配置されています。
SnapCrab_NoName_2017-2-15_9-53-41_No-00

以下、シーンに配置されているオブジェクトについての概要説明です。
  • Left Controller、RightController: [VRTK] ゲームオブジェクトの下に配置されている、左右のコントローラー用のVRTKスクリプトをアタッチするゲームオブジェクト。
    VRTK_ControllerEventsVRTK_InteractGrab その他のスクリプトがアタッチされており、シーンに配置されているインタラクタブルオブジェクトを掴んで持ち上げたり引っ張ったりすることができる。

  • FixedJointGrab_Cube、SpringJointGrab_Cube、TrackGrab_Cube: 3つ積み重なるように配置されているCube。それぞれ VRTK_FixedJointGrabAttachVRTK_SpringJointGrabAttachVRTK_TrackObjectGrabAttach がアタッチされており、コントローラーで持って振り回したりした際に異なる挙動をする。
    FixedJointGrab_Cube( VRTK_FixedJointGrabAttach がアタッチされている)は、デフォルトの挙動で、普通に持つことができる。
    SpringJointGrab_Cube( VRTK_SpringJointGrabAttach がアタッチされている)は、持って振り回したとき、Cubeがバネのように揺れ動く。
    TrackGrab_Cube( VRTK_TrackObjectGrabAttach がアタッチされている)は、一見 Fixed Joint と同じようだが、ほかのオブジェクトにひっかかったりした場合にもすぐにコントローラーとのジョイントが外れず、コントローラーを追従する。
    全画面キャプチャ 20170218 132325

  • Case: シーンに配置されている工具箱のようなオブジェクト。下図のHierarchyビューのように、複数のオブジェクトが組み合わされている。Lid(ふた) は Hinge Joint で Base(ケース本体)とジョイントされている。
    Handle(持ち手)オブジェクトは Fixed Joint で Lid とジョイントしており、また、 VRTK_TrackObjectGrabAttach がアタッチされている。これにより、Handle をコントローラーで掴んで引っ張ると、箱のふたが開くように動作する。
    全画面キャプチャ 20170218 134050

  • FireExtinguisher: 消火器状の複合オブジェクト。
    Body(消火器の胴体)とSprayer(ホースの先の噴射口)に VRTK_TrackObjectGrabAttach がアタッチされており、コントローラーで持つことができる。
    また、Body には FireExtinguisher_Body 、Sprayer には FireExtinguisher_Sprayer という、それぞれ VRTK_InteractableObject を拡張したスクリプトがアタッチされており、手に持って Body側のトリガーボタンを押すことで Sprayer の先から消火剤のようなパーティクルを噴射することができる。
    全画面キャプチャ 20170218 141841

    FireExtinguisher を動かしてみたところ(動画)。


  • Drawer: タンスのような複合オブジェクト。Unit(引き出し)に VRTK_SpringJointGrabAttach がアタッチされており、引っ張り出すことができる。
    ( Configurable Joint によってタンス本体とジョイントし、引き出す方向や引き出せる幅などが設定されている)
    全画面キャプチャ 20170218 144206

  • DoorFrame:  ドアのような複合オブジェクト。
    Door に VRTK_RotatorTrackGrabAttach がアタッチされており、ドア部分を掴んで引っ張ることでドアを開け閉めすることができる。
    (※ ためしに VRTK_RotatorTrackGrabAttach に代えて VRTK_TrackObjectGrabAttach をアタッチしてみたところ、Door と DoorFrame との接合部分がややぐらつくような感じになった)
    全画面キャプチャ 20170218 150255

  • Wheel: ホイール(円盤)とその中心に取り付けられている軸および地面から伸びる柱。
    Wheel 本体に VRTK_RotatorTrackGrabAttach がジョイントされており、Hinge Joint でジョイントされている Axel(軸)を中心として回転させることができる。
    全画面キャプチャ 20170218 150618

  • Lighter: ライター。
    VRTK_FixedJointGrabAttach がアタッチされており、その Right Snap Handle および Left Snap Handle が設定されているため、それぞれ設定されたとおりの位置・回転で左右のコントローラーにスナップされる。
    Right Snap Handle および Left Snap Handle は相互に反転させたような回転座標を持っており、これによって左右どちらの手で持ってもライターのフタ(Lid)が体の内側で開くようになっている。
    全画面キャプチャ 20170218 152446

  • RealGun: 他の Example にあるものよりも複雑な形状の銃オブジェクト。
    銃の上部にある Slide オブジェクトには VRTK_TrackObjectGrabAttach がアタッチされており、コントローラーで掴んで引っ張ることができる。また、銃を持ってトリガーボタンを押して銃弾を発射したときにも Slide は動くようになっている。
    全画面キャプチャ 20170218 153827
    また、この銃には SafetySwitch(安全スイッチ)というインタラクタブルオブジェクトがあり、 RealGun_SafetySwitch スクリプトがアタッチされている。コントローラーでこのオブジェクトに触れた状態でトリガーボタンを押すことで Safety Off パラメータが切り替わり、銃弾を発射可能か否かを制御できるようになっている。
    全画面キャプチャ 20170218 154656

  • Lamp: ランプのように(?)組み合わされた複合オブジェクト。
    Sphere、TopJoint、MiddleJoint の各オブジェクトには VRTK_CustomJointGrabAttach がアタッチされており、その Custom Joint パラメータには Spring Jpint コンポーネントがセットされている。これらの部位はコントローラーで掴んで引っ張ることができる。(それらより下の部位、BottomJoint および Base は掴んで動かすことはできない)
    全画面キャプチャ 20170218 161026

今回は以上です。