Unity は XR 開発をサポートするプラグインフレームワーク、機能セット、ツールパッケージを提供してます。Project Settings 内の XR Plug-in Management カテゴリを開いて Unity プロジェクトの XR サポートを有効にし、プロジェクトがサポートする XR プラットフォーム用のプラグインを選択します。追加の機能パッケージは Unity の Package Manager を使用してインストールできます。
下の図は、現在の Unity XR プラグインフレームワークの構造と、それがどのようにプラットフォームプロバイダーの実装と連携機能するかを示したものです。

XR サブシステムは、XR 機能の共通インターフェースを定義します。XR プラグインは、このサブシステムインターフェースを実装することによってランタイムでサブシステムにデータを提供します。XR アプリケーションは、Unity エンジンとパッケージ API を通して XR 機能のデータにアクセスすることができます。
XR プロバイダープラグインは、1 つまたは複数の XR デバイスプラットフォームをサポートする Unity プラグインです。例えば、ARCore プラグインは Android 携帯端末の Android AR プラットフォームをサポートし 、OpenXR プラグインは複数の XR デバイスの複数の OS をサポートします。
XR プロバイダープラグインは、Unity XR SDK によって定義されるインターフェースを実装します。このインターフェースは サブシステム と呼ばれます。1 つまたは複数のサブシステムを実装するプラグインは プロバイダー プラグインと呼ばれます。プロバイダープラグインは通常、デバイスプラットフォームのネイティブライブラリを使用して、該当デバイス用の Unity インターフェースを実装します。
Unity は、サブシステムインターフェースを使用して様々なプラットフォームのプロバイダーと通信し、アプリケーションの XR 機能を提供します。このインターフェースのおかげで、アプリケーション内の同じ機能コードを、その機能のプロバイダーを持つすべての XR デバイスで再使用できます。
XR サブシステムは、Unity アプリケーション内で XR 機能を使用できるようにします。Unity XR SDK は、各種サブシステムに 1 つの共通のインターフェースを定義するので、同じ機能を実装するすべてのプロバイダープラグインはアプリケーション内で基本的に同様に機能します。多くの場合、アクティブなプロバイダーを変更してアプリケーションをリビルドすることで、別の XR プラットフォーム上で実行させることができます (大部分において類似したプラットフォームの場合に限る)。
Unity エンジンは、基本的な XR サブシステムのセットを定義します。追加のサブシステムは Unity パッケージが提供します。例えば AR Subsystems パッケージには、AR 固有のサブシステムインターフェースの多くが含まれています。
Unity エンジン内で定義されるサブシステムには、以下が含まれます。
| サブシステム | 説明 |
|---|---|
| Display | ステレオ XR ディスプレイ |
| 入力 | 空間トラッキングとコントローラー入力 |
| メッシュ生成 | 環境スキャンから 3D メッシュを生成します。 |
注意通常、Unity アプリケーションはサブシステムと直接相互作用しません。アプリケーションは、XR プラグインまたはパッケージを通して、サブシステムの提供する機能を使用できるようになっています。例えば、AR Foundation パッケージの ARMeshManager コンポーネントを使用すると、Meshing サブシステムで作成したメッシュをシーンに追加できます。