2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Oculus Quest2】テレポート移動するプレイヤーの実装

Last updated at Posted at 2022-06-21

Oculus Integrationを使ってテレポート移動を実装します。
写真 2022-06-21 17 30 50.gif

環境

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の大きさなど、実装したい内容に合わせて調整して下さい。
スクリーンショット (16).png

OVRCameraRigを設定

Oculus Integrationをインポートし、OVRCameraRigをVRPlayerControllerの子として配置します。
OVRCameraRigのTracking Origin TypeをFloorLevel に設定します。

プレイヤーの設定

VRPlayerControllerにSimple Capsule With Stick MovementをAdd Componentします。
スティック移動やテレポート移動ができるスクリプトです。
CameraRigの項目にOVRCameraRigをアタッチします。
スクリーンショット (19).png

コントローラーを配置

OVRCameraRig > LeftHandAnchorとRightHandAnchorの子に、お好みのコントローラーを配置します。
今回はCustomHandLeftとCustomHandRightにしました。
スクリーンショット (13).png

環境の準備

MainCameraは削除し、Planeを配置しておきましょう。
後で使うTeleportDestinationとTeleportLaserプレハブも、シーンに配置しておきます。(配置せずに進めることも出来ますが、今回はわかりやすいように配置しています。)

そしてレイヤーを新規作成します。
Layer > AddLayer > User Layer 8 にTeleport を作成し、PlaneのレイヤーをTeleportに設定します。
後の設定で、このレイヤーに設定した場所のみにテレポートするようになります。
スクリーンショット (21).png

LocomotionControllerの作成

コンポーネントの準備

VRPlayerControllerの子に空のオブジェクトを作成、名前をLocomotionControllerとします。
ここに下記画像のコンポーネントをAdd Componentします。
似た名前のものばかりなのでご注意下さい。
スクリーンショット (15).png

コンポーネントの設定

各コンポーネントの内容と設定を確認していきます。

LocomotionController

CameraRigにOVRCameraRigを、CharacterControllerにVRPlayerControllerを、
PlayerControllerにVRPlayerControllerをD&Dします。
スクリーンショット (20).png

Locomotion Teleport

今回は移動方法をテレポートのみにするので、スティックを倒した際にプレイヤーが動いてしまわないように設定します。
画像の赤枠を参考に、不要なチェックを外しましょう。

Teleport Destination PrefabとTeleport Destination Layerも、画像のように設定します。
ここで指定する「8」は、Planeに設定したテレポート先のレイヤーの番号です。
スクリーンショット (23).png

Teleport Input Handler Touch

テレポート移動のための入力処理を設定するコンポーネントです。
今回は左のサムスティックでテレポートするように設定しました。ここはお好みでカスタマイズしてください。
スクリーンショット (24).png

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で曲線の描画の滑らかさが変わります。お好みでカスタマイズしてください。
今回は画像のようにしました。

スクリーンショット (25).png

Teleport Orientation Handler Thumbstick

テレポート移動後にどの方向に向くかをコントローラで指定できるようにするコンポーネントです。
これが無いと上手く動かないようです。
今回はThumbstickをR Touchに設定します。

Teleport Transition Instant

下記3つのどれをAdd Componentするかで、テレポート移動の仕方を選ぶことができます。
お好みで選んで下さい。

  • Teleport Transition Instant
    エフェクト無しで瞬時に移動。
  • Teleport Transition Blink
    フェードアウトを挟んで移動。一番酔いにくい。
  • TeleportTransitionWarp
    移動する間の描画を省略しない。酔いやすい。

完成イメージ

20220621_155623.GIF

あとはお好みで見た目を整えて下さい。
TeleportLaserの色はTeleportAimVisualLaserのスクリプトから変更できます。
私はこのように仕上げてみました。

写真 2022-06-21 17 30 50.gif

お疲れ様でした。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?