Unity シーンで Unity XR オブジェクトを自動切り替えする
Unity の XR コンポーネント(AR Foundation を含む)が対応できるデバイスは限られています。対応デバイスでは AR Foundation を使用しつつ、その他多くのデバイスでも AR 機能を使用できるようにするため、EasyAR は Unity XR オブジェクトの自動切り替え機能を提供しています。以下では、この機能がシーンオブジェクトに加える変更と使用方法を説明します。
開始する前に
- EasyAR の Unity XR framework サポート を読み、EasyAR の Unity XR framework への対応状況と、どのような場合に AR Foundation の使用を検討できるかを理解します。
- EasyAR プロジェクトでの AR Foundation シーン設定と使用方法 に従って、シーンに AR Foundation の ARSession と XROrigin が追加されていることを確認します。
機能紹介
Unity の AR Foundation はスマートフォン上では内部実装が ARCore と ARKit であるため、限られたデバイスでしか使用できず、特に多くの中国国内向け Android スマートフォンでは使用できません。そのため通常は、対応デバイスでのみ AR Foundation と関連機能 script を有効にすることが推奨されます。Unity XR オブジェクトの自動切り替え機能はこの操作を実現するもので、主に mobile AR 向けに設計され、ヘッドセットではデフォルト設定で無効になります。
完全な機能が有効な場合、
- エディターでは、easyar.ARSession が UnityEngine.XR.ARFoundation.ARSession を無効にします
- runtime では、easyar.ARSession が Awake() 時にすべての Unity XR Core コンポーネントおよび AR Foundation コンポーネントを無効にします。
- runtime では、選択された FrameSource が ARFoundationFrameSource を継承している場合、または XROrigin origin を実装した ExternalDeviceFrameSource である場合、無効にされた Unity XR Core コンポーネントおよび AR Foundation コンポーネントは easyar.ARSession.StartSession() 時に有効化されます(EasyAR によって無効化されていないものは有効化されません)。他の FrameSource が選択された場合は、easyar.ARSession.StartSession() 時にすべての Unity XR Core コンポーネントおよび AR Foundation コンポーネントが無効化されます。
- runtime では、すべての Unity XR Core コンポーネントおよび AR Foundation コンポーネントが easyar.ARSession.StopSession(bool) 時に無効化されます。
デフォルト設定では、機能が有効になる条件は次のとおりです。
- Windows/Mac で有効。
- switcher 起動時に mobile AR(ARKit/ARCore)の loader が active の場合、有効。
- switcher 起動時に mobile AR(ARKit/ARCore)以外の loader が存在するが、active な loader が 1 つもない場合、無効。
注記
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: runtime モードオプション
- Enable: runtime 制御を有効化します。注意: このオプションをオフにすると、編集モードで無効化されたコンポーネントは runtime で復元されません。
- Enable If Desktop: Windows/Mac で有効化します。
- Enable If Mobile AR On Startup: switcher 起動時に mobile AR(ARKit/ARCore)の loader が active の場合、有効化します。通常、このオプションでは
Project Settings>XR Plug-in ManagementのInitialize XR on Startupが選択されている必要があります。 - Disable If Non Mobile AR Post Startup: switcher 起動時に mobile AR(ARKit/ARCore)以外の loader が存在するが、active な loader が 1 つもない場合、無効化します。通常、このオプションは
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 を無効化します(実行順序が他のすべての script より早いため)
- AR Foundation が動作を開始する前に、すべての Unity XR Core コンポーネント、AR Foundation コンポーネント、および制御が必要な関連コンポーネントまたは機能を無効化します
- easyar.ARSession.Assemble() の過程で ARCoreARFoundationFrameSource または ARKitARFoundationFrameSource が選択された場合、以前に無効化したすべてのコンポーネントまたは機能を StartSession() 完了前に有効化します。通常は easyar.ARSession.AssembleUpdate イベント応答内で完了することをお勧めします
- easyar.ARSession.Assemble() の過程で他の FrameSource が選択された場合は、そのままにします