見出し画像

XR Interaction Toolkitでテレポートする

Unityが提供しているXR Interaction Toolkitを使用して、コントローラーのグリップのボタンを使用してテレポートできるようにします。
テレポート先を作成し、コントローラーから伸びる線(Ray)を当てる事で、テレポート先を指定、グリップのボタンを押下する事でテレポートします。
テレポート先が選択されているかどうかは、Rayの色(赤から白)で判断します。
前回の連続的に視界が変化する平行移動は、VR酔いをしやすいですが、瞬時に視界が変わるテレポートでの移動は、VR酔いがしにくいです。

環境

Unityバージョン:2020.3.10f1
XR Interaction Toolkit:1.0.0-pre.4
Oculus Quest2:v29 ソフトウェア

環境は、なるべく執筆時点の最新バージョンを使用するようにしています。
XR Interaction Toolkitが、pre.4に上がっていました。
Oculus Quest2のソフトウェアのバージョンは、v29に上がっていました。

注意事項

Oculus Quest2のテスト機能の一つとして実装されている「VRにデスクを持ち込もう」を有効にしていると自作プログラムが動作しません。起動せずに終了してしまいます。
(筆者の環境によるものかもしれません。ネット上では同様の情報が見つかりませんでした。)
v28からテスト機能に実装された 「VRにデスクを持ち込もう」ですが、v28では問題が発生しませんでした。通常のStoreから購入したゲームなどは、有効にしていても動作している為、有効にしたまま使用するには、何かしらの設定が必要なのかもしれません。

プロジェクトの作成及び設定

前回の記事を参考にしてください。
前回記事:XR Interaction Toolkitで移動する

プログラムの作成

■VR用カメラと床とキューブの作成
VR用のカメラと床とキューブは、前々回記事を参考にしてください。
前々回記事:XR Interaction Toolkitを使用してみる - プログラムの作成

XR Interaction Toolkitのバージョンが上がった(pre.4)影響か、「Room-Scale XR Rig (Action-based)」と「Stationary XR Rig (Action-based)」が無くなり、「XR Rig (Action-based)」になったようです。
pre.3までに存在したRoom-Scale XR Rig (Action-based)と同様にするには、Hierarchyビューの右クリックして表示されるコンテキストメニューからXR > XR Rig (Action-based)を選択し、XR Rigを作成します。
作成したXR Rigを選択し、InspectorビューのXR RigコンポーネントのTracking Origin Modeを「Floor」に設定する必要があります。

画像1

■Input Action Managerの作成とコントローラーの設定
Input Action Managerの作成とコントローラーへのアクションのマッピング情報の設定は、前回記事を参考にしてください。
前回記事:XR Interaction Toolkitで移動する - プログラムの作成

■移動を管理するコンポーネントの追加
移動全般を行うLocomotion SystemコンポーネントをXR Rigに追加します。
これも、前回記事を参考にしてください。
前回記事:XR Interaction Toolkitで移動する - プログラムの作成

■テレポートを行うコンポーネントの追加
テレポートを行うTeleportation Providerコンポーネントを追加します。
HierarchyビューのXR Rigを選択し、Inspectorビューの「Add Component」ボタンからTeleportation Providerコンポーネントを追加します。
Teleportation ProviderコンポーネントのSystemにLocomotion System(Script)コンポーネントが含まれたオブジェクトを設定します。(ここではXR Rig)。

画像2

■テレポート先の作成
テレポート先は、点(Teleportation Anchor)と範囲(Teleportation Area)の二通りあります。点は設定されている特定の位置に移動し、範囲は設定されているオブジェクトの指定の位置に移動します。
点のテレポート先を新たに作成し、範囲のテレポート先を作成済みの床に設定します。
最初に、点のテレポート先を作成します。
Hierarchyビューの右クリックして表示されるコンテキストメニューから3D Object > Planeを選択し、作成されたPlaneの名称を「TeleportationPoint」とします。
位置と大きさを変更する為、Hierarchyビューから作成したTeleportationPointを選択し、InspectorビューのTransform - PositionのZに8を設定、ScaleのX、Y、Xに0.2を設定します。

画像3

点のテレポート先である事を設定する為に、Teleportation Anchorコンポーネントを作成したTeleportationPointに追加します。
HierarchyビューからTeleportationPointを選択し、Inspectorビューの「Add Component」ボタンからTeleportation Anchorコンポーネントを追加します。
Teleportation AnchorコンポーネントのTeleportation Configuration - Teleportation Providerに、Teleportation Providerコンポーネントが含まれたオブジェクト(ここではXR Rig)を設定します。

画像4

次に床を範囲のテレポート先として設定します。
範囲のテレポート先である事を設定する為に、Teleportation AreaコンポーネントをPlaneに追加します。
HierarchyビューからPlaneを選択し、Inspectorビューの「Add Component」ボタンからTeleportation Areaコンポーネントを追加します。
先ほどと同様にTeleportation AreaコンポーネントのTeleportation Configuration - Teleportation Providerに、Teleportation Providerコンポーネントが含まれたオブジェクト(ここではXR Rig)を設定します。

画像5

実行

保存(File > Save)してから、Oculus Quest2が接続されている事を確認し、Build And Run(File > Build And Run)を実行します。
コンパイルが開始され、コンパイル終了後に接続されているOculus Quest2にプログラムが自動転送され実行されます。
実行すると視線の先に、小さな床がありコントローラーから伸びている赤い線(Ray)を当てると、Rayが白い線に変わります。これがテレポート先を選択している状態になります。この状態で、コントローラーのグリップのボタンを押下すると、小さな床に瞬間移動します。後ろを向くと、移動前に居た場所を確認できます。
ここで、移動前に居た大きな床を選択するとRayが当たっている先に瞬間移動します。大きな床の方は、Rayが当たっている場所に自由に瞬間移動できます。

終わりに

前回の平行移動や回転、今回のテレポートを組み合わせる事で、仮想空間内を自由に動きまわる事ができるようになりました。

将来の自分への備忘録、ついでに誰かの何かのきっかけになれば幸いです。

この記事が気に入ったらサポートをしてみませんか?