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


VR用アセット「VRTK」の Example 041_Controller_ObjectSnappingToDropZones の解説です。
オブジェクトを落として特定の位置にスナップさせるデモです。
SnapCrab_NoName_2017-2-15_17-8-19_No-00

■公式サイトの解説

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

このExampleの解説動画
(このExampleの公式解説動画はまだありません) 


■VRTKのセットアップ方法および使用されているスクリプトの解説

適宜、以下の記事を参照願います。
  • スクリプト「VRTK_PolicyList」の解説
      (今後執筆予定)
  • スクリプト「VRTK_HipTracking」の解説
      (今後執筆予定)

■Exampleの解説

VRTK/Examples 内にある当該番号のシーンを呼び出すことで、デモを動かしてみることができます。

このデモシーンは、VRTK の SnapDropZone プレハブによってあらかじめ決められたスナップゾーンを設定し、特定のタイプのオブジェクトだけを特定の位置にスナップする方法を示しています。
SnapCrab_NoName_2017-2-15_20-40-15_No-00

以下、シーンに配置されているオブジェクトについての概要説明です。
  • ExampleObjects ①(上図右のオブジェクト群): 人の頭、胴体、左右の腕、左右の脚を模したパーツがバラバラの状態で配置されている。頭および胴体には他の適切な部位と接続するために VRTK_SnapDropZpne 、VRTK_PolicyList ほか必要なコンポーネントがアタッチされている。
    頭には胴体を、胴体には腕と脚を、あらかじめ設定されているドロップゾーンに持っていき手放すと、定められた位置・回転・スケール・方式で接続される(人の形につなげることができる)。
    SnapCrab_NoName_2017-2-15_20-45-33_No-00

    代表して、「LeftLegDropZone」の設定。VRTK_PolicyList によって、この場所には「Leg」というタグのついたオブジェクトのみドロップできるよう設定されている。VRTK_SnapDropZpne の SnapType には Use_Joint が指定されており、脚のオブジェクトは CharacterJoint コンポーネントの設定にしたがって接続される。
    SnapCrab_NoName_2017-2-15_20-54-37_No-00
    SnapCrab_NoName_2017-2-15_21-54-10_No-00

  • ExampleObjects ②(その他のオブジェクト群): 人の部位以外のオブジェクト群。下図のように並んでおり、Cubeが2個、Sphereが2個、Saucer(組み合わされたオブジェクト)が2個、また下図でピンク色に見える箇所に SnapDropZone が設定されており、下図の左側からCube、Sphere、Saucerのみがドロップできるようになっている。
    SnapCrab_NoName_2017-2-15_21-12-39_No-00
    SnapCrab_NoName_2017-2-15_21-54-43_No-00

    代表して、「Cube_SnapDropZone」の設定。
    SnapCrab_NoName_2017-2-15_21-17-49_No-00

  • RightController: 右のコントローラー用のVRTKスクリプトがアタッチされているゲームオブジェクト。このデモシーンでは、その下に SnapDropZone がぶら下げられており(「ControllerSphere_SnapDropZone」)、Sphere オブジェクトをその位置にドロップしてジョイントすることができる。VRTK_SnapDropZone の Apply Scaling On Snap にチェックが入っているため、Sphere はスナップされる際に SnapDropZone ゲームオブジェクトのスケールのとおりXYZそれぞれ0.5倍に縮小される。
    SnapCrab_NoName_2017-2-15_21-32-36_No-00
    SnapCrab_NoName_2017-2-15_21-37-1_No-00

  • PlayerHips: VRTK_HipTracking スクリプトがアタッチされており、プレイヤーのお尻の位置を(疑似的に)トラッキングするゲームオブジェクト。ここには Holster ゲームオブジェクトがぶら下げられており、さらにその下に SnapDropZone がぶら下げられている(「Holster_SnapDropZone」)。ゲームシーンを再生すると、プレイヤーの腰のあたりに下図のようなオブジェクトが表示され、プレイヤーの動きに追従する。これには FlyingSaucer をドロップすることができる。
    SnapCrab_NoName_2017-2-15_21-44-50_No-00

今回は以上です。