Oculus Integrationを使ってテレポート移動を実装します。
環境
Windows 11
Unity 2021.3.4f1
Oculus Integration 40.0
Oculus Quest 2
参考にさせて頂きました
今回は下記の3つの記事・動画の内容を組み合わせて実装しました。
当記事は簡略化しておりますので、より詳しい解説はリンクからご参照下さい。
https://xrdnk.hateblo.jp/entry/2020/03/25/002404
https://www.youtube.com/watch?v=10xu4exNstQ
https://developer.oculus.com/documentation/unity/unity-sf-locomotion/?locale=ja_JP
準備
プレイヤーの作成
空のオブジェクトを作成し、名前をVRPlayerControllerとします。
RigidbodyとCapsuleColliderをAdd Componentします。
今回は画像のように設定しました。
Colliderの大きさなど、実装したい内容に合わせて調整して下さい。
OVRCameraRigを設定
Oculus Integrationをインポートし、OVRCameraRigをVRPlayerControllerの子として配置します。
OVRCameraRigのTracking Origin TypeをFloorLevel に設定します。
プレイヤーの設定
VRPlayerControllerにSimple Capsule With Stick MovementをAdd Componentします。
スティック移動やテレポート移動ができるスクリプトです。
CameraRigの項目にOVRCameraRigをアタッチします。
コントローラーを配置
OVRCameraRig > LeftHandAnchorとRightHandAnchorの子に、お好みのコントローラーを配置します。
今回はCustomHandLeftとCustomHandRightにしました。
環境の準備
MainCameraは削除し、Planeを配置しておきましょう。
後で使うTeleportDestinationとTeleportLaserプレハブも、シーンに配置しておきます。(配置せずに進めることも出来ますが、今回はわかりやすいように配置しています。)
そしてレイヤーを新規作成します。
Layer > AddLayer > User Layer 8 にTeleport を作成し、PlaneのレイヤーをTeleportに設定します。
後の設定で、このレイヤーに設定した場所のみにテレポートするようになります。
LocomotionControllerの作成
コンポーネントの準備
VRPlayerControllerの子に空のオブジェクトを作成、名前をLocomotionControllerとします。
ここに下記画像のコンポーネントをAdd Componentします。
似た名前のものばかりなのでご注意下さい。
コンポーネントの設定
各コンポーネントの内容と設定を確認していきます。
LocomotionController
CameraRigにOVRCameraRigを、CharacterControllerにVRPlayerControllerを、
PlayerControllerにVRPlayerControllerをD&Dします。
Locomotion Teleport
今回は移動方法をテレポートのみにするので、スティックを倒した際にプレイヤーが動いてしまわないように設定します。
画像の赤枠を参考に、不要なチェックを外しましょう。
Teleport Destination PrefabとTeleport Destination Layerも、画像のように設定します。
ここで指定する「8」は、Planeに設定したテレポート先のレイヤーの番号です。
Teleport Input Handler Touch
テレポート移動のための入力処理を設定するコンポーネントです。
今回は左のサムスティックでテレポートするように設定しました。ここはお好みでカスタマイズしてください。
Teleport Target Handler Physical
テレポート先を指定したい場合に使うコンポーネントです。
Aim Collision Layer MaskにTeleportレイヤーを設定します。
これで、Teleportレイヤーに指定した場所へだけテレポートするようになります。
Teleport Aim Visual Laser
テレポート先へと伸びるレーザーを、視覚的に表示するコンポーネントです。
Laser Prefabの項目にTeleportLaserをアタッチします。
Teleport Aim Handler Parabolic
Teleport Aim Visual Laserだけだと直線的なレーザーになりますが、これを追加することで曲線を描くようになります。
Rangeが0だとレーザーが描画されない為、適当な値にします。
Aim Velocityで移動できる距離、Aim Stepで曲線の描画の滑らかさが変わります。お好みでカスタマイズしてください。
今回は画像のようにしました。
Teleport Orientation Handler Thumbstick
テレポート移動後にどの方向に向くかをコントローラで指定できるようにするコンポーネントです。
これが無いと上手く動かないようです。
今回はThumbstickをR Touchに設定します。
Teleport Transition Instant
下記3つのどれをAdd Componentするかで、テレポート移動の仕方を選ぶことができます。
お好みで選んで下さい。
- Teleport Transition Instant
エフェクト無しで瞬時に移動。 - Teleport Transition Blink
フェードアウトを挟んで移動。一番酔いにくい。 - TeleportTransitionWarp
移動する間の描画を省略しない。酔いやすい。
完成イメージ
あとはお好みで見た目を整えて下さい。
TeleportLaserの色はTeleportAimVisualLaserのスクリプトから変更できます。
私はこのように仕上げてみました。
お疲れ様でした。