Unityクロスプラットフォーム開発
複数のプラットフォームとデバイスをターゲットにしたい開発者は、
Meta XR Core SDKを使って、OpenVRをサポートする複数のプラットフォームをターゲットにして構築できます。このページでは、クロスプラットフォーム開発でサポートされるAPIと、一般的なMeta開発との機能的な違いについて詳しく説明します。このページでは、APIの一般的な使用方法やUnityガイドの他の部分で説明されている開発プロセスについては詳しく説明しません。
クロスプラットフォーム開発を行う開発者は、MetaプラットフォームとSteamVRプラットフォームのいずれかを別々にターゲット設定した場合、最小限の追加作業だけですぐに動作するアプリを作成できます。インプットのクロスプラットフォームサポートでは、Rift SとTouchコントローラー、HTC Vive™とコントローラー、Windows Mixed Realityヘッドセットとモーションコントローラーなど、6DOF HMDとコントローラーが通常サポートされます。
「OVRCameraRigを使用してカメラRigを追加する」ガイドに記載されている手順に従ってください。既存のアプリをアップデートする場合は、OpenVR HMDとコントローラーをトラッキングするため、既存のカメラを削除し、新しいカメラのprefabをシーンにドラッグする必要があります。
OVRCameraRig prefabを追加する場合、トラッキングオリジンとして FloorLevelを選択する必要があります。EyeLevelはクロスプラットフォーム開発ではサポートされていません。
クロスプラットフォーム開発では、コントローラーでトラッキングするオブジェクトをLControllerAnchorとRControllerAnchorのいずれかの子にする必要があります。
クロスプラットフォーム開発では、ローカルのトラッキング空間に対する相対的なHMDの移動速度を取得するために、以下のOVRDisplay APIがサポートされています。
- OVRDisplay.velocity()
- OVRDisplay.angularvelocity()
OVRInputガイドに、Metaコントローラー向けのOVRInput APIの使用方法が説明されています。クロスプラットフォーム開発では、以下のAPIがサポートされています。
個別のボタン - 以下に示すボタンで
Get()、
GetUp()、
GetDown()がサポートされています。
Get()はコントロールの現在の状態(押されていればtrue)を返し、
GetUp()はフレーム内でコントロールがリリースされたかどうか(リリースされていればtrue)を返し、
GetDown()はフレーム内でコントロールが押されたかどうか(押されていればtrue)を返します。Metaコントローラーのマッピングについては、「
OVRInput」ページに記載されています。
- Button.PrimaryIndexTrigger
- Button.SecondaryIndexTrigger
- Button.PrimaryHandTrigger
- Button.SecondaryHandTrigger
- Button.PrimaryThumbstick
- Button.SecondaryThumbstick
- Button.Two
- Button.Four
- Axis1D.PrimaryIndexTrigger
- Axis1D.PrimaryHandTrigger
- Axis1D.SecondaryIndexTrigger
- Axis1D.SecondaryHandTrigger
- Axis2D.PrimaryThumbstick
- Axis2D.SecondaryThumbstick
これらのAPIでは、既存のアプリとの下位互換性を維持するため、Meta TouchコントローラーとViveコントローラーはどちらも「Touch」として扱われます。左のXRコントローラー = LTouch、右のXRコントローラー = RTouchです。ボタン/コントロールの状態は、以下に関して要求できます。
- Controller.LTouch
- Controller.RTouch
- Controller.Touch
クロスプラットフォームで使用する場合はTouchコントローラーを第2引数(LTouchまたはRTouch)として指定し、第1引数を「Primary」バインディングにすることをおすすめします。Touchコントローラーを第2引数として指定する必要はありませんが、多くの場合その方が簡単です。以下はその例です。
- OVRInput.Get(Button.PrimaryHandTrigger, Controller.LTouch)は、左のXRコントローラーの「グリップ」または「ハンド」トリガーが長押しされているときにtrueを返します。
- OVRInput.GetDown(Button.Two, Controller.LTouch)は、あるフレーム内で左のXRコントローラーの「上側のボタン」が押されたときにtrueを返します。これは、Meta TouchのYボタンおよびViveコントローラーの上部にある3本線のボタンを表します。RTouchを指定した場合は、TouchのBボタンを表します。
- OVRInput.Get(Axis1D.PrimaryIndexTrigger.Controller.RTouch)は、軸値(0~1.0)を返します。右のXRコントローラーの人差し指トリガーがどれほど深く押されたかを表します。
コントローラーの位置と速度 - クロスプラットフォーム開発では、ローカルのトラッキング空間に対する相対的なコントローラーの位置と移動速度を取得するために、以下のOVRInput APIがサポートされています。
- GetLocalControllerPosition()
- GetLocalControllerRotation()
- GetLocalControllerVelocity()
- GetLocalControllerAngularVelocity()
HTC Viveコントローラー

前述のOVRInput APIは、HTC Viveコントローラーの以下のボタンに相当します。
- Button.Twoが上の図の「メニューボタン」(1)に相当。
- Axis2D.PrimaryThumbstickが上の図の静電容量「トラックパッド」(2)に相当。
- Button.PrimaryThumbstickが上の図の「トラックパッド」(2)の長押しに相当。
- Axis1D.PrimaryIndexTriggerが上の図の「トリガー」(7)に相当。
- Axis1D.PrimaryHandTriggerが上の図の「グリップボタン」(8)に相当。
Microsoft Mixed Realityモーションコントローラー
前述のOVRInput APIは、Microsoft Mixed Realityモーションコントローラーの以下のボタンに相当します。各ボタンの詳細は、Microsoftの
モーションコントローラーページに記載されています(「ハードウェアの詳細」にあるコントローラーの画像をご覧ください)。
- Button.Twoが「メニュー」に相当。
- Axis2D.PrimaryThumbstickが「サムスティック」に相当。
- Button.PrimaryThumbstickが「タッチパッド」の長押しに相当。
- Axis1D.PrimaryIndexTriggerが「トリガー」に相当。
- Axis1D.PrimaryHandTriggerが「グラブ」に相当。
クロスプラットフォームのハプティックサポートは、SetControllerVibration APIによって可能になっています。クロスプラットフォーム開発では、OVRHpaticsおよびOVRHapticsClip APIはサポートされていません。
OVRInputのガイドには、0~1(これらの値を含む)の間の任意の増分の振幅、およびフリークエンシー1.0をサポートするクロスプラットフォームデバイスで、このAPIを使用する方法が記載されています。以下に例を示します。
- OVRInput.SetControllerVibration(1.0f, 0.5f, Controller.RTouch)は、右のXRコントローラーに関してピーク振幅の半分でハプティックを再生します。新しい振動が設定される(または0に設定される)まで、この振幅で再生が続行されます。すべての振動は2秒後にタイムアウトします。
- OVRInput.SetControllerVibration(1.0f, 0.0f, Controller.RTouch)は、右のXRコントローラーのハプティック再生を終了します。
開発者は、OVRBoundaryのガイドで説明されているように、OVRBoundaryを使用してユーザーのプレイエリアに関する情報を取得および設定できます。クロスプラットフォーム開発では、以下のAPIがサポートされています。
- GetDimensions()
- GetGeometry()
- SetVisible()
- GetVisible()
- GetConfigured()
OVROverlayを使用してオーバーレイを追加する方法については、
VRコンポジターレイヤーのガイドをご覧ください。現時点では、ワールドにロックされたクワッドオーバーレイのみがクロスプラットフォーム開発でサポートされています。
クロスプラットフォームのオーバーレイを使用するには、クワッドのゲームオブジェクトをシーンに追加し、メッシュレンダラーコンポーネントとコライダーコンポーネントを削除し、クワッドにOVROverlayコンポーネントを追加して、表示するテクスチャーを指定します。