Unity x HTC Vive で The Lab のようなワープを簡単に実装する

Unity x HTC Vive で The Lab みたいに簡単にワープできないかと、色々と模索していたら意外に簡単にできたので忘却録の意味も込めて記事にする。

流れは以下の通り。以下の流れの前に PC で Vive が動作している & Unity の VR 設定ができていることを前提に記述する。完成したサンプルは https://github.com/tanabee/ViveTeleporter にて入手。

  1. SteamVR Plugin を Unity にインポート
  2. Hierarchy パネルに CameraRig を配置
  3. Main Camera を Deactivate or 削除
  4. Laser Pointer と Teleporter を Controller に Add Component

1. SteamVR Plugin を Unity にインポート

SteamVR Plugin を Unity の Asset Store タブなどからダウンロードしてインポートする。

これが現状では HTC Vive 対応するための標準ライブラリらしい。

Unity で Asset Store タブを選択
Unity で Asset Store タブを選択。

Asset Store で SteamVR Plugin を探す
Asset Store で SteamVR Plugin を探す。ダウンロードボタンをクリック。

SteamVR Plugin の import
SteamVR Plugin のダウンロードが完了すると import を求められるので import をクリック。

Steam VR Plugin のダイアログ
ダイアログが出るので、とりあえず Accept All しとく。

2. Hierarchy パネルに CameraRig を配置

Project パネルの SteamVR > Prefabs 以下に [CameraRig] というプレハブがあるので、これをドラッグして Hierarchy パネルにドロップ。

SteamVR/Prefabs/CameraRig を見つける
SteamVR/Prefabs/CameraRig を見つける

SteamVR/Prefabs/CameraRig を Hierarchy パネルにドロップ
SteamVR/Prefabs/CameraRig を Hierarchy パネルにドロップ

この中にカメラと左右のコントローラが含まれている。この状態でビルドすると

3. Main Camera を Deactivate or 削除

Main Camera が不要であれば削除する。Oculus などの他の端末のために残して、 Vive 用だけこのカメラを利用する場合には Deactivate する。

この状態でビルドすると、Vive の hmd を装着して Scene ファイル内の映像が見えてコントローラーが表示されているはず。

4. Laser Pointer と Teleporter を Controller に Add Component

SteamVR/Extras/ 以下の SteamVR_LaserPointer と SteamVR_Teleporter を CameraRig 以下の Controller に Add Component する。SteamVR_Teleporter の Teleport On Click にチェックを入れるとトリガーを引いた時にレーザーがあたっている Y=0 のポイントに移動する。

CameraRig 以下の Controller を選択
CameraRig 以下の Controller を選択

SteamVR_LaserPointer と SteamVR_Teleporter を Add Component
SteamVR_LaserPointer と SteamVR_Teleporter を Add Component

まとめと補足

以上で Vive でコントローラーを表示し、ビームが出て、ビームと Y=0 の設置点に移動できるようになった。さらに進んで背景の地面の高さに合わせた設定をするためには、 Telepot Type を変更して背景オブジェクトのコライダーを設定すれば良さそう。

また、この Camera Rig を 特定のゲームオブジェクト内に挿入するとそのゲームオブジェクトの回転の影響でビームが逆に出たりするのでその場合には親のゲームオブジェクトの rotation を考慮して内部のコードをいじればいけた。(が、美しい方法ではないのでいい方法があれば教えて欲しい)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です