在 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,則保持不變