Unity
Oculus
VR
OculusGo

Oculus Goでテレポート移動する

VR でプレーヤーの視点を移動する際にはいわゆる「VR酔い」への対策が必要になります。瞬間的に視点位置が切り替わる「テレポート」は手固い酔い対策なので、Oculus Go での実装を調べてみました。

参考(というか全部)

Oculus の開発者ブログにそのものズバリな記事がありました。

Teleport Curves with the Gear VR Controller

記事のタイトルはGear VR ですが、Oculus Go でも適用できます。
また、実装は本文中のリンクからUnity Package をダウンロード可能ですので、これを使えばテレポートを実現できます。

out.gif

移動だけでなく、タッチパッドに触れる位置によって移動後の向き変更もしてくれます。

確認した環境

  • Unity 2017.4.2f2
  • Oculus Integration 1.25

導入方法

  1. Oculus Integration をインポート
  2. Oculus/VR/Prefabs/OVRCameraRig をHierarchy に配置(Oculus 用カメラ。もともとのMain Camera は削除する)
  3. OVRCameraRig/TrackingSpace/LeftHandAnchor とRightHandAnchor の下にOculus/VR/Prefabs/TrackedRemote を配置(コントローラー表示用。設定によって左右どちらかが表示される)
    • LeftHandAnchor 以下に配置したTrackedRemote はInspector でContoller をL Tracked Remote に変更
  4. ダウンロードしたArcLocomotion.unitypackage をインポート
  5. Project View のArcLocomotion/Prefavs/TallLocomotion をHierarchy に配置(テレポート用Prefav。BezierLocomotion かParabolicLocomotion でもOK)
  6. TallLocomotion のInspector で以下を設定
    • Tall Raycaster のTracking Space にOVRCameraRig/TrackingSpace を設定
    • Arc Teleporter のObject To Move (移動させるオブジェクト)にOVRCameraRig を設定

最終的にHierarchy は以下のようになります。

teleport-3.png

テレポート先の指定とカーブの描画方法

簡単に中身も紹介。
記事では3つの手法が紹介されています。

  1. ベジェ曲線 (Bézier curve)
  2. 放物線 (Parabolic curve)
  3. トールレイキャスト (Tall ray cast:上空からレイを飛ばす)

手法の詳細にはここでは触れませんが、ベジェ曲線と放物線では接地位置取得のために曲線をセグメントに区切って判定する必要があり、そのため単純にレイを飛ばすトールレイキャストが最も計算コストが低い、と書かれていました。

ちなみにトールレイキャストの曲線はベジェ曲線で描画されているようです(判定と視覚化が分けてある)。

まとめ

Oculus Go でのテレポート実装を調べてみました。参考記事の実装はライセンスが明記されていなかったので注意が必要ですが、内容は非常に参考になります。