在 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)的 loader 是啟動的,則啟用。
- 切換器啟動時,如果存在行動AR(ARKit/ARCore)之外的其它 loader,但沒有任何一個 loader 是啟動的,則停用。
附註
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)的 loader 是啟動的,則啟用。通常這個選項需要
Project Settings>XR Plug-in Management中的Initialize XR on Startup是選中的。 - Disable If Non Mobile AR Post Startup:切換器啟動時,如果存在行動AR(ARKit/ARCore)之外的其它 loader,但沒有任何一個 loader 是啟動的,則停用。通常這個選項會在
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,則保持不變