Unity シーン内での Unity XR オブジェクトの自動切り替え
Unity の XR コンポーネント(AR Foundation を含む)がサポートできるデバイスは限られています。サポートされているデバイスで AR Foundation を使用しつつ、他の多数のデバイスで AR 機能を利用できるようにするため、EasyAR は Unity XR オブジェクトの自動切り替え機能を提供します。以下に、この機能がシーンオブジェクトに与える変更と使用方法について説明します。
開始する前に
- EasyAR の Unity XR フレームワークサポート を読み、EasyAR の Unity XR フレームワークに対するサポート状況と、AR Foundation の使用を検討すべき状況を理解してください。
- シーンが EasyAR プロジェクトにおける AR Foundation シーンの設定と使用方法 で説明されている通り、AR Foundation の ARSession および XROrigin を追加済みであることを確認してください。
機能説明
Unity の AR Foundation はモバイルデバイスでは ARCore および ARKit が基盤となっており、限られたデバイスでのみ使用可能で、特に多くの国産 Android スマートフォンでは使用できないため、通常はサポートされているデバイスでのみ AR Foundation および関連機能スクリプトを有効にすることをお勧めします。Unity XR オブジェクトの自動切り替え機能はこの操作を実現し、主にモバイル AR 向けに設計されており、ヘッドセットではデフォルト設定で機能は無効化されます。
完全な機能が有効な場合、
- エディタ内では、easyar.ARSession が UnityEngine.XR.ARFoundation.ARSession を無効にします。
- ランタイムでは、easyar.ARSession は Awake() 時にすべての Unity XR Core コンポーネントおよび AR Foundation のコンポーネントを無効にします。
- ランタイムでは、選択された FrameSource が ARFoundationFrameSource を継承しているか、XROrigin 原点を実装した ExternalDeviceFrameSource である場合、無効化された Unity XR Core コンポーネントおよび AR Foundation コンポーネントは easyar.ARSession.StartSession() 時に有効化されます(EasyAR によって無効化されていないものは有効化されません)。他の FrameSource が選択された場合、easyar.ARSession.StartSession() 時にすべての Unity XR Core コンポーネントおよび AR Foundation のコンポーネントが無効化されます。
- ランタイムでは、すべての Unity XR Core コンポーネントおよび AR Foundation のコンポーネントは easyar.ARSession.StopSession(bool) 時に無効化されます。
デフォルト設定では、機能は以下の条件で有効になります。
- Windows/Mac 上で有効。
- スイッチャー起動時に、モバイル AR(ARKit/ARCore)のローダーがアクティブな場合、有効。
- スイッチャー起動時に、モバイルAR(ARKit/ARCore)以外の他のローダーが存在し、かつどのローダーもアクティブでない場合、無効。
注記
XR Interaction Toolkit のコンポーネントはこの機能の制御対象外ですが、EasyAR 内での動作保証はありません。理論的には、Unity.XR.CoreUtils.XROrigin GameObject とその Camera のみを使用する機能は正常に動作するはずです。動作が不安定な場合は、ARSession.ARCenterMode を ARSession.ARCenterMode.SessionOrigin に設定してみてください。それでも正常に動作しない場合は、カスタムの XR Interaction Toolkit コンポーネント制御を実装し、FrameSource が ARFoundationFrameSource を継承していない場合に関連コンポーネントを無効にする必要があります。
設定方法
この機能は、Project Settings > EasyAR > Sense 内の Unity XR > Unity XR Auto Switch のオプションで有効または無効にできます。

図中のオプションは以下のように機能を設定します:
- Editor:エディットモードオプション
- Disable AR Session:easyar.ARSession が存在する場合、編集時に UnityEngine.XR.ARFoundation.ARSession を無効にします。
- Player:プレイモードオプション
- Enable:ランタイム制御を有効にします。注意:このオプションをオフにすると、エディットモードで無効化されたコンポーネントはランタイムで復元されません。
- Enable If Desktop:Windows/Mac 上で有効にします。
- Enable If Mobile AR On Startup:スイッチャー起動時に、モバイル AR(ARKit/ARCore)のローダーがアクティブな場合、有効にします。通常、このオプションは
Project Settings>XR Plug-in Management内のInitialize XR on Startupが選択されている必要があります。 - Disable If Non Mobile AR Post Startup:スイッチャー起動時に、モバイルAR(ARKit/ARCore)以外の他のローダーが存在し、かつどのローダーもアクティブでない場合、無効にします。通常、このオプションは
Project Settings>XR Plug-in Management内のInitialize XR on Startupが選択されていない場合に使用されます。 - Restore AR Session When Disabled:機能が無効な場合、無効化されているすべての UnityEngine.XR.ARFoundation.ARSession(EasyAR によって無効化されたかどうかに関わらず)を復元(有効化)します。このオプションは通常、編集時に無効化されたコンポーネントを復元するために使用されます。
カスタム制御方法の使用
これらのコンポーネントの切り替えをカスタマイズする必要がある場合、または EasyAR の動作が特定のコンポーネントの正常な動作を妨げている場合は、これらのオプションをオフにし、以下の基本ルールに基づいてコンポーネント切り替えをカスタマイズしてください:
- エディタで UnityEngine.XR.ARFoundation.ARSession を無効にする(他のすべてのスクリプトより先に実行される)。
- AR Foundation が動作を開始する前に、すべての Unity XR Core コンポーネント、AR Foundation コンポーネント、および制御が必要な関連コンポーネントまたは機能を無効にする。
- easyar.ARSession.Assemble() プロセス中に ARCoreARFoundationFrameSource または ARKitARFoundationFrameSource が選択された場合、事前に無効にしたすべてのコンポーネントまたは機能を有効にする。これは StartSession() が完了する前に完了する必要があり、通常は easyar.ARSession.AssembleUpdate イベントのレスポンスで行うことを推奨します。
- easyar.ARSession.Assemble() プロセス中に他の FrameSource が選択された場合は、そのままにしておく。