Unity x HTC Vive で The Lab みたいに簡単にワープできないかと、色々と模索していたら意外に簡単にできたので忘却録の意味も込めて記事にする。
流れは以下の通り。以下の流れの前に PC で Vive が動作している & Unity の VR 設定ができていることを前提に記述する。完成したサンプルは https://github.com/tanabee/ViveTeleporter にて入手。
- SteamVR Plugin を Unity にインポート
- Hierarchy パネルに CameraRig を配置
- Main Camera を Deactivate or 削除
- Laser Pointer と Teleporter を Controller に Add Component
1. SteamVR Plugin を Unity にインポート
SteamVR Plugin を Unity の Asset Store タブなどからダウンロードしてインポートする。
これが現状では HTC Vive 対応するための標準ライブラリらしい。
Unity で Asset Store タブを選択。
Asset Store で SteamVR Plugin を探す。ダウンロードボタンをクリック。
SteamVR Plugin のダウンロードが完了すると import を求められるので import をクリック。
ダイアログが出るので、とりあえず Accept All しとく。
2. Hierarchy パネルに CameraRig を配置
Project パネルの SteamVR > Prefabs 以下に [CameraRig] というプレハブがあるので、これをドラッグして Hierarchy パネルにドロップ。
SteamVR/Prefabs/CameraRig を見つける
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 を選択
SteamVR_LaserPointer と SteamVR_Teleporter を Add Component
まとめと補足
以上で Vive でコントローラーを表示し、ビームが出て、ビームと Y=0 の設置点に移動できるようになった。さらに進んで背景の地面の高さに合わせた設定をするためには、 Telepot Type を変更して背景オブジェクトのコライダーを設定すれば良さそう。
また、この Camera Rig を 特定のゲームオブジェクト内に挿入するとそのゲームオブジェクトの回転の影響でビームが逆に出たりするのでその場合には親のゲームオブジェクトの rotation を考慮して内部のコードをいじればいけた。(が、美しい方法ではないのでいい方法があれば教えて欲しい)