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


VR用アセット「VRTK」のスクリプト VRTK_BodyPhysics の概要です。
壁などにぶつかるユーザーの身体を作ります。

■このクラスは VRTK_DestinationMarker を継承しています。

SnapCrab_NoName_2017-2-19_13-35-52_No-00

■公式サイトの解説

公式サイトによる解説はこちら。

VRTK_BodyPhysics · VRTK - Virtual Reality Toolkit

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


■概要

  • VRTK_BodyPhysics スクリプトは、シーン内のユーザーの身体が世界の物理学(Physics)にどのように反応し、ドロップを処理するかを扱う。
  • これは物理的な相互作用を可能にし、壁を通って歩行するのを防ぐために、ユーザが立っているところに Rigidbody とコライダーを作る。
  • 実際にプレイエリア内を移動すると Rigidbody は isKinematic に設定され、ユーザの視界が押し戻されるのを防ぎ、VR酔いを軽減する。
  • また、レッジ(棚)を見たり階段を上ったりすると、シーン内の動きをシミュレートするためにプレイエリアを移動させるため、ユーザーを最寄りのフロアにスナップすることも扱う。
  • レッジを越えて落ちないようにするには、既存のフロアにコントローラを置くことによって落下の兆候が発生し、コントローラがフロアの上に来るまで最寄りのフロアへのスナップが発生する。

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

  • Enable Body Collisions: このチェックボックスをオンにすると、ボディコライダーと Rigidbody が衝突をチェックするために使用される。
  • Ignore Grabbed Collisions: これをチェックすると、コントローラでグラブされたアイテムはボディコライダーと衝突しない。これは、コライダーがアクティブだった場合、コライダーから跳ね返るため、ユーザーがオブジェクトをつかむ必要がある場合に非常に便利である。
  • Headset Y Offset: ユーザー用に作成されたコライダーは、ユーザーのヘッドセット位置からの高さに設定される。プレイエリアコライダーとヘッドセットの間のスペースを確保するためにコライダーを低くする必要がある場合、このオフセット値は生成されるコライダーの高さを短くする。
  • Movement Threshold: ヘッドセットの現在の位置と現在の起立位置の間のヘッドセットの移動量で、ユーザーがプレイスペース内を歩いているかどうかを判断し、移動デルタがこのしきい値を超えている場合は身体の物理衝突を無視する。
  • Standing History Samples: プレイスペース内の現在の立位が変化したかどうかを判断する前に、ヘッドセットの位置を収集するサンプルの最大数。
  • Lean Y Threshold: ヘッドセットと乗りかかっているオブジェクトとの間の Y 座標における距離で、もし乗りかかられているオブジェクトがこのしきい値よりも高ければ、現在の立ち位置は更新されない。
  • Layers To Ignore: レイヤーを見つけるためにレイキャスティングを行うときに無視するレイヤー。
  • Fall Restriction: 最寄り階へのドロップが発生するかどうかを確認するチェック。選択されたリストリクタがまだ現在のフロアにある場合、最寄りのフロアへのドロップは発生しない。棚を上に傾けて下を見ることができるようにうまく機能する。テレポートしないで落ちるだけのために働く。
  • Gravity Fall Y Threshold: 床とヘッドセットの間の Y 座標における距離がこの距離を超え、Enable Body Collisions が true のとき、Rigidbody 重力はテレポートの代わりに最寄り階にドロップする。
  • Blink Y Threshold: フェード遷移が開始される前に変更する必要があるヘッドセットとフロアのの間の Y 座標における距離。新しいユーザの位置が閾値よりも高い距離にある場合、ヘッドセットの瞬き遷移はテレポートで起動する。新しいユーザの位置が閾値内にある場合、瞬き遷移は起こらず、これは瞬時の瞬きを防止するために勾配、メッシュ、および地形を歩くのに役立つ。
  • Floor Height Tolerance: フロア高さの変更が発生したとみなされる前の現在のフロアy位置と前のフロアy位置の間でポジションを変更する必要がある量。ここでの値が高いほど、ユーザの下にある床の床が所定の閾値ほど変化していない場合に、Drop To Floor が起こりにくくなることを意味する。

■関連するExamples

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

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

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

今回は以上です。