在使用(yòng)雙渲染融合(實驗性)功能(néng)時,有(yǒu)一些額外的注意事項需要考慮。
眼鏡連接/斷開
雙渲染融合允許開發人員構建将 XR 作(zuò)為(wèi)智能(néng)手機移動體(tǐ)驗擴展的應用(yòng)程序。因此,有(yǒu)必要檢查在 XR 眼鏡未連接時,應用(yòng)程序是否按預期運行。最簡單的方法是訂閱 Fusion Lifecycle Events 組件提供的事件。
注意事項
開發應用(yòng)程序時需要考慮的一些額外問題包括:
● 應用(yòng)程序在啓動時眼鏡斷開和連接時分(fēn)别是什麽樣子?
○ 利用(yòng) On OpenXR Started 和 On OpenXR Stopped 事件,它們會在 XR 内容可(kě)用(yòng)或不可(kě)用(yòng)時發出信号。
○ On OpenXR Available 和 On OpenXR Unavailable 事件會發出信号,指示眼鏡是否可(kě)用(yòng),以及啓動 XR 内容的調用(yòng)是否能(néng)成功
○ 如果 XR 内容不可(kě)用(yòng),請禁用(yòng)它!
● 如果眼鏡“現在”斷開連接,應用(yòng)程序會如何表現?
○ 當眼鏡斷開連接時,會觸發 On OpenXR Stopping、On OpenXR Stopped 和 On OpenXR Unavailable 事件。
○ 在斷開連接時,應用(yòng)程序應立即停止使用(yòng)任何 XR 感知功能(néng)。在停止後,調用(yòng)這些功能(néng)将會失敗。
○ 請通知用(yòng)戶在 XR 内容不可(kě)用(yòng)時需要重新(xīn)連接眼鏡。
● 如果用(yòng)戶按下眼鏡上的電(diàn)源按鈕,應用(yòng)程序會如何表現?
○ 通常,這會導緻 XR 内容被暫停。但請注意,應用(yòng)程序仍然在智能(néng)手機的前台運行。如果眼鏡因放在桌子上而進入睡眠狀态(接近傳感器超時),也會發生類似的行為(wèi)。
○ 請監聽 On Idle 和 On Active 事件。 如果 XR 内容不可(kě)見,可(kě)以考慮降低其優先級。可(kě)以考慮暫停内容更新(xīn)或減少高強度部分(fēn)的運行頻率。
● 如果用(yòng)戶按下智能(néng)手機上的主頁(yè)按鈕,應用(yòng)程序會如何表現?
○ 這通常會被 Unity 處理(lǐ)為(wèi)暫停。與普通的 Snapdragon Spaces 項目不同,使用(yòng)雙渲染融合時,這意味着 XR 内容會被停止,同時智能(néng)手機應用(yòng)程序也會被置于後台。有(yǒu)關更多(duō)信息,請參見應用(yòng)程序後台處理(lǐ)。
● 用(yòng)戶是否有(yǒu)可(kě)能(néng)在不支持雙渲染融合(MR/VR 全合一頭戴設備)的設備上運行此應用(yòng)程序?結果會是什麽樣的?
○ 可(kě)以使用(yòng) On Host View Enabled 和 On Host View Disabled 事件來獲取來自 Spaces Host View 組件的信息。
○ 這些事件會指示是否有(yǒu)能(néng)夠顯示雙渲染融合内容的智能(néng)手機可(kě)用(yòng)。
○ 如果智能(néng)手機内容無法使用(yòng),請确保禁用(yòng)任何不可(kě)用(yòng)的 UI 元素。
故障排除
應用(yòng)程序仍然沒有(yǒu)按預期運行?以下是一些提示和技(jì )巧,幫助您解決問題并使開發工(gōng)作(zuò)回到正軌:
場景切換
請特别注意關于動态 OpenXR 加載器、Spaces Glass 狀态、Spaces Host View 和 Fusion Lifecycle Events 組件在場景切換中(zhōng)的說明。
動态 OpenXR 加載器、Spaces Glass 狀态和 Spaces Host View 組件旨在保持在場景切換中(zhōng)繼續存在,并會被自動标記為(wèi) DontDestroyOnLoad。這意味着這些組件需要附加到層級視圖中(zhōng)的根級别遊戲對象上。
Fusion Lifecycle Events 組件不打算在場景切換中(zhōng)繼續存在,因此不應标記為(wèi) DontDestroyOnLoad。它應根據每個場景的需要進行配置,以處理(lǐ) XR 或智能(néng)手機内容的啓用(yòng)和禁用(yòng)。
斷開連接導緻的功能(néng)喪失
默認情況下,動态 OpenXR 加載器會處理(lǐ) XR 内容不可(kě)用(yòng)時 AR Session 和 AR Session Origin/XR Origin 遊戲對象的啓用(yòng)和禁用(yòng)。其他(tā)遊戲對象可(kě)以通過 Fusion Lifecycle Events 根據應用(yòng)需求進行禁用(yòng)。但需要考慮禁用(yòng)某些組件的影響。
例如,建議在 XR 内容不活躍時,不要禁用(yòng) Input Action Manager 和 Event System 組件。項目驗證窗口會對此發出警告。
點擊“編輯”将會在控制台中(zhōng)記錄有(yǒu)關問題的詳細信息,并提供解決方法。
示例
在上述示例中(zhōng),當眼鏡斷開連接時,禁用(yòng)名(míng)為(wèi)“Sample Object To Be Disabled”的遊戲對象會導緻子對象 XR Interaction Manager 上的 Input Action Manager 或 Event System 組件被禁用(yòng),這将使智能(néng)手機無法響應觸摸屏輸入。
● 如果确實需要禁用(yòng)“Sample Object To Be Disabled”,應将存在問題的子對象重新(xīn)歸屬到其他(tā)父對象下。
● 另外,也可(kě)以考慮重命名(míng) XR Interaction Manager 對象,因為(wèi)它不僅影響 XR 内容的交互。
在為(wèi)應用(yòng)程序構建層級結構時,必須考慮 XR 生命周期事件導緻的每個組件禁用(yòng)的影響。
雖然很(hěn)難列出所有(yǒu)可(kě)能(néng)的問題組件,但在驗證步驟中(zhōng)監控的組件列表會随着問題的發現而不斷增加。
運行時診斷日志(zhì)
雙渲染融合功能(néng)在嘗試訪問不可(kě)用(yòng)的 XR 功能(néng)時,可(kě)以提供有(yǒu)用(yòng)的診斷日志(zhì)。運行時可(kě)能(néng)會生成類似于以下的重複日志(zhì)條目:
完整的診斷日志(zhì)可(kě)能(néng)包含大量信息,這可(kě)能(néng)會導緻其他(tā)有(yǒu)用(yòng)的錯誤信息被覆蓋。因此,完整的診斷日志(zhì)隻會在每個 OpenXR 會話第一次嘗試使用(yòng)功能(néng)并失敗時顯示。這意味着如果眼鏡斷開連接,将重新(xīn)檢查日志(zhì),眼鏡重新(xīn)連接後也會再次檢查。
完整診斷日志(zhì)的輸出可(kě)能(néng)包含多(duō)個消息。
以下是可(kě)能(néng)記錄的消息示例,以及解決這些問題的方法:
● 雙渲染融合功能(néng)未啓用(yòng)。如果 OpenXR 沒有(yǒu)運行,很(hěn)可(kě)能(néng)是因為(wèi)在“項目設置 > XR 插件管理(lǐ) > 啓動時初始化 XR”中(zhōng)禁用(yòng)了“啓動時初始化 XR”選項。啓用(yòng)雙渲染融合功能(néng)時,這種配置是正确的,但如果未啓用(yòng),應用(yòng)程序将無法啓動 XR 内容。
● 相反的問題是 - 在“項目設置 > XR 插件管理(lǐ) > 啓動時初始化 XR”中(zhōng)啓用(yòng)了“啓動時初始化 XR”選項,但實際上應該禁用(yòng)它。
● 當眼鏡斷開連接時,XR 内容無法啓動,但如果沒有(yǒu) Spaces Glass Status 組件,就無法獲取何時可(kě)以成功啓動的信息。Dynamic OpenXR Loader 組件需要一個 Spaces Glass Status 組件來正常運行,并在斷開連接時幫助管理(lǐ) XR 内容的生命周期。建議添加 Dynamic OpenXR Loader 組件,并啓用(yòng) Auto Start XR On Display Connected 和 Auto Manage XR Camera 屬性。如果需要手動管理(lǐ)應用(yòng)程序的生命周期,至少應添加一個 Spaces Glass Status 組件。
● 如果在切換場景(以及斷開/重新(xīn)連接)後出現類似錯誤,這可(kě)能(néng)表明 Dynamic OpenXR Loader 或 Spaces Glass Status 組件沒有(yǒu)在場景切換中(zhōng)保留。這可(kě)能(néng)是因為(wèi)這些組件在創建時被附加到場景中(zhōng)的非根級遊戲對象上。請參見上面的“場景切換”部分(fēn)。
● 出現了在不安(ān)全的情況下嘗試使用(yòng) XR 功能(néng)的情況。這通常是因為(wèi)某個遊戲對象在場景中(zhōng)處于激活狀态,但它應該在接收到 On OpenXR Started 信号之前被禁用(yòng)。
示例
考慮以下完整診斷日志(zhì)中(zhōng)的消息:
在這個示例中(zhōng),有(yǒu)一個附加了 SpacesCompositionLayer 組件的遊戲對象。當場景加載時,這個遊戲對象被創建,但眼鏡尚未連接。它嘗試使用(yòng) CompositionLayersFeature,但由于沒有(yǒu)連接眼鏡,XR 内容無法運行,因此訪問該功能(néng)失敗。
Fusion Lifecycle Events 組件應該在接收到 On OpenXR Started 信号後啓用(yòng)這個遊戲對象。如果場景保存時遊戲對象被禁用(yòng),但後來有(yǒu)人重新(xīn)啓用(yòng)它,那麽錯誤會再次出現。
如果在應用(yòng)啓動時接收到 On OpenXR Unavailable 信号,Fusion Lifecycle Events 組件應該禁用(yòng)這個遊戲對象。
另外,如果接收到 On OpenXR Stopping 或 On OpenXR Stopped 信号,也應該禁用(yòng)這個遊戲對象,否則它可(kě)能(néng)會在不安(ān)全的情況下嘗試訪問功能(néng)。
在手動處理(lǐ)生命周期時,還需要注意,OpenXR 可(kě)能(néng)會被停止但仍然保持可(kě)用(yòng)。這種情況發生在眼鏡仍然連接,但應用(yòng)程序可(kě)能(néng)選擇禁用(yòng) OpenXR 功能(néng)時。可(kě)用(yòng)狀态僅表示眼鏡已連接。請注意,手動調用(yòng) DynamicOpenXrLoader.Instance.StopOpenXR() 不會斷開眼鏡的連接。
應用(yòng)程序後台運行
雙渲染融合架構的一個缺點是,與頭戴式架構不同,應用(yòng)程序無法在後台運行,而前台運行另一個應用(yòng)程序。
項目驗證器引起的構建問題
在運行自動構建時,請禁用(yòng)“驗證開放場景”功能(néng)設置,有(yǒu)關詳細信息,請參閱“配置雙渲染融合設置”。