使用(yòng)雙重渲染融合

在使用(yòng)雙渲染融合(實驗性)功能時(shí),有一些額外的(de)注意事項需要考慮。

 

眼鏡連接/斷開

雙渲染融合允許開發人(rén)員(yuán)構建将 XR 作爲智能手機移動體驗擴展的(de)應用(yòng)程序。因此,有必要檢查在 XR 眼鏡未連接時(shí),應用(yòng)程序是否按預期運行。最簡單的(de)方法是訂閱 Fusion Lifecycle Events 組件提供的(de)事件。

 

注意事項

開發應用(yòng)程序時(shí)需要考慮的(de)一些額外問題包括:

 

●  應用(yòng)程序在啓動時(shí)眼鏡斷開和(hé)連接時(shí)分(fēn)别是什(shén)麽樣子?

○ 利用(yòng) On OpenXR Started 和(hé) On OpenXR Stopped 事件,它們會在 XR 内容可(kě)用(yòng)或不可(kě)用(yòng)時(shí)發出信号。

○ On OpenXR Available 和(hé) On OpenXR Unavailable 事件會發出信号,指示眼鏡是否可(kě)用(yòng),以及啓動 XR 内容的(de)調用(yòng)是否能成功

○ 如果 XR 内容不可(kě)用(yòng),請禁用(yòng)它!

 

●  如果眼鏡“現在”斷開連接,應用(yòng)程序會如何表現?

○ 當眼鏡斷開連接時(shí),會觸發 On OpenXR Stopping、On OpenXR Stopped 和(hé) On OpenXR Unavailable 事件。

○ 在斷開連接時(shí),應用(yòng)程序應立即停止使用(yòng)任何 XR 感知功能。在停止後,調用(yòng)這(zhè)些功能将會失敗。

○ 請通(tōng)知用(yòng)戶在 XR 内容不可(kě)用(yòng)時(shí)需要重新連接眼鏡。

 

●  如果用(yòng)戶按下(xià)眼鏡上的(de)電源按鈕,應用(yòng)程序會如何表現?

○ 通(tōng)常,這(zhè)會導緻 XR 内容被暫停。但請注意,應用(yòng)程序仍然在智能手機的(de)前台運行。如果眼鏡因放在桌子上而進入睡(shuì)眠狀态(接近傳感器超時(shí)),也(yě)會發生類似的(de)行爲。

○ 請監聽(tīng) On Idle 和(hé) On Active 事件。 如果 XR 内容不可(kě)見,可(kě)以考慮降低其優先級。可(kě)以考慮暫停内容更新或減少高(gāo)強度部分(fēn)的(de)運行頻(pín)率。

 

●  如果用(yòng)戶按下(xià)智能手機上的(de)主頁按鈕,應用(yòng)程序會如何表現?

○ 這(zhè)通(tōng)常會被 Unity 處理(lǐ)爲暫停。與普通(tōng)的(de) Snapdragon Spaces 項目不同,使用(yòng)雙渲染融合時(shí),這(zhè)意味著(zhe) XR 内容會被停止,同時(shí)智能手機應用(yòng)程序也(yě)會被置于後台。有關更多(duō)信息,請參見應用(yòng)程序後台處理(lǐ)。

 

●  用(yòng)戶是否有可(kě)能在不支持雙渲染融合(MR/VR 全合一頭戴設備)的(de)設備上運行此應用(yòng)程序?結果會是什(shén)麽樣的(de)? 

○ 可(kě)以使用(yòng) On Host View Enabled 和(hé) On Host View Disabled 事件來(lái)獲取來(lái)自 Spaces Host View 組件的(de)信息。

○ 這(zhè)些事件會指示是否有能夠顯示雙渲染融合内容的(de)智能手機可(kě)用(yòng)。

○ 如果智能手機内容無法使用(yòng),請确保禁用(yòng)任何不可(kě)用(yòng)的(de) UI 元素。

 

故障排除

應用(yòng)程序仍然沒有按預期運行?以下(xià)是一些提示和(hé)技巧,幫助您解決問題并使開發工作回到正軌:

 

場(chǎng)景切換

請特别注意關于動态 OpenXR 加載器、Spaces Glass 狀态、Spaces Host View 和(hé) Fusion Lifecycle Events 組件在場(chǎng)景切換中的(de)說明(míng)。

動态 OpenXR 加載器、Spaces Glass 狀态和(hé) Spaces Host View 組件旨在保持在場(chǎng)景切換中繼續存在,并會被自動标記爲 DontDestroyOnLoad。這(zhè)意味著(zhe)這(zhè)些組件需要附加到層級視圖中的(de)根級别遊戲對(duì)象上。

Fusion Lifecycle Events 組件不打算(suàn)在場(chǎng)景切換中繼續存在,因此不應标記爲 DontDestroyOnLoad。它應根據每個(gè)場(chǎng)景的(de)需要進行配置,以處理(lǐ) XR 或智能手機内容的(de)啓用(yòng)和(hé)禁用(yòng)。

 

斷開連接導緻的(de)功能喪失

默認情況下(xià),動态 OpenXR 加載器會處理(lǐ) XR 内容不可(kě)用(yòng)時(shí) AR Session 和(hé) AR Session Origin/XR Origin 遊戲對(duì)象的(de)啓用(yòng)和(hé)禁用(yòng)。其他(tā)遊戲對(duì)象可(kě)以通(tōng)過 Fusion Lifecycle Events 根據應用(yòng)需求進行禁用(yòng)。但需要考慮禁用(yòng)某些組件的(de)影(yǐng)響。

 

例如,建議(yì)在 XR 内容不活躍時(shí),不要禁用(yòng) Input Action Manager 和(hé) Event System 組件。項目驗證窗(chuāng)口會對(duì)此發出警告。


圖片27.png

 

點擊“編輯”将會在控制台中記錄有關問題的(de)詳細信息,并提供解決方法。

 

示例

 

圖片28.png


在上述示例中,當眼鏡斷開連接時(shí),禁用(yòng)名爲“Sample Object To Be Disabled”的(de)遊戲對(duì)象會導緻子對(duì)象 XR Interaction Manager 上的(de) Input Action Manager 或 Event System 組件被禁用(yòng),這(zhè)将使智能手機無法響應觸摸屏輸入。

 

● 如果确實需要禁用(yòng)“Sample Object To Be Disabled”,應将存在問題的(de)子對(duì)象重新歸屬到其他(tā)父對(duì)象下(xià)。

● 另外,也(yě)可(kě)以考慮重命名 XR Interaction Manager 對(duì)象,因爲它不僅影(yǐng)響 XR 内容的(de)交互。

 

在爲應用(yòng)程序構建層級結構時(shí),必須考慮 XR 生命周期事件導緻的(de)每個(gè)組件禁用(yòng)的(de)影(yǐng)響。

 

雖然很難列出所有可(kě)能的(de)問題組件,但在驗證步驟中監控的(de)組件列表會随著(zhe)問題的(de)發現而不斷增加。

 

運行時(shí)診斷日志

雙渲染融合功能在嘗試訪問不可(kě)用(yòng)的(de) XR 功能時(shí),可(kě)以提供有用(yòng)的(de)診斷日志。運行時(shí)可(kě)能會生成類似于以下(xià)的(de)重複日志條目:


圖片29.png

 

完整的(de)診斷日志可(kě)能包含大(dà)量信息,這(zhè)可(kě)能會導緻其他(tā)有用(yòng)的(de)錯誤信息被覆蓋。因此,完整的(de)診斷日志隻會在每個(gè) OpenXR 會話(huà)第一次嘗試使用(yòng)功能并失敗時(shí)顯示。這(zhè)意味著(zhe)如果眼鏡斷開連接,将重新檢查日志,眼鏡重新連接後也(yě)會再次檢查。

 

完整診斷日志的(de)輸出可(kě)能包含多(duō)個(gè)消息。

 

以下(xià)是可(kě)能記錄的(de)消息示例,以及解決這(zhè)些問題的(de)方法:


圖片30.png

 

● 雙渲染融合功能未啓用(yòng)。如果 OpenXR 沒有運行,很可(kě)能是因爲在“項目設置 > XR 插件管理(lǐ) > 啓動時(shí)初始化(huà) XR”中禁用(yòng)了(le)“啓動時(shí)初始化(huà) XR”選項。啓用(yòng)雙渲染融合功能時(shí),這(zhè)種配置是正确的(de),但如果未啓用(yòng),應用(yòng)程序将無法啓動 XR 内容。

 

圖片31.png


● 相反的(de)問題是 - 在“項目設置 > XR 插件管理(lǐ) > 啓動時(shí)初始化(huà) XR”中啓用(yòng)了(le)“啓動時(shí)初始化(huà) XR”選項,但實際上應該禁用(yòng)它。

 

圖片32.png


● 當眼鏡斷開連接時(shí),XR 内容無法啓動,但如果沒有 Spaces Glass Status 組件,就無法獲取何時(shí)可(kě)以成功啓動的(de)信息。Dynamic OpenXR Loader 組件需要一個(gè) Spaces Glass Status 組件來(lái)正常運行,并在斷開連接時(shí)幫助管理(lǐ) XR 内容的(de)生命周期。建議(yì)添加 Dynamic OpenXR Loader 組件,并啓用(yòng) Auto Start XR On Display Connected 和(hé) Auto Manage XR Camera 屬性。如果需要手動管理(lǐ)應用(yòng)程序的(de)生命周期,至少應添加一個(gè) Spaces Glass Status 組件。

 

● 如果在切換場(chǎng)景(以及斷開/重新連接)後出現類似錯誤,這(zhè)可(kě)能表明(míng) Dynamic OpenXR Loader 或 Spaces Glass Status 組件沒有在場(chǎng)景切換中保留。這(zhè)可(kě)能是因爲這(zhè)些組件在創建時(shí)被附加到場(chǎng)景中的(de)非根級遊戲對(duì)象上。請參見上面的(de)“場(chǎng)景切換”部分(fēn)。

 

圖片35.png


● 出現了(le)在不安全的(de)情況下(xià)嘗試使用(yòng) XR 功能的(de)情況。這(zhè)通(tōng)常是因爲某個(gè)遊戲對(duì)象在場(chǎng)景中處于激活狀态,但它應該在接收到 On OpenXR Started 信号之前被禁用(yòng)。

 

示例

考慮以下(xià)完整診斷日志中的(de)消息:


圖片36.png

 

在這(zhè)個(gè)示例中,有一個(gè)附加了(le) SpacesCompositionLayer 組件的(de)遊戲對(duì)象。當場(chǎng)景加載時(shí),這(zhè)個(gè)遊戲對(duì)象被創建,但眼鏡尚未連接。它嘗試使用(yòng) CompositionLayersFeature,但由于沒有連接眼鏡,XR 内容無法運行,因此訪問該功能失敗。

 

Fusion Lifecycle Events 組件應該在接收到 On OpenXR Started 信号後啓用(yòng)這(zhè)個(gè)遊戲對(duì)象。如果場(chǎng)景保存時(shí)遊戲對(duì)象被禁用(yòng),但後來(lái)有人(rén)重新啓用(yòng)它,那麽錯誤會再次出現。

如果在應用(yòng)啓動時(shí)接收到 On OpenXR Unavailable 信号,Fusion Lifecycle Events 組件應該禁用(yòng)這(zhè)個(gè)遊戲對(duì)象。

另外,如果接收到 On OpenXR Stopping 或 On OpenXR Stopped 信号,也(yě)應該禁用(yòng)這(zhè)個(gè)遊戲對(duì)象,否則它可(kě)能會在不安全的(de)情況下(xià)嘗試訪問功能。

 

在手動處理(lǐ)生命周期時(shí),還(hái)需要注意,OpenXR 可(kě)能會被停止但仍然保持可(kě)用(yòng)。這(zhè)種情況發生在眼鏡仍然連接,但應用(yòng)程序可(kě)能選擇禁用(yòng) OpenXR 功能時(shí)。可(kě)用(yòng)狀态僅表示眼鏡已連接。請注意,手動調用(yòng) DynamicOpenXrLoader.Instance.StopOpenXR() 不會斷開眼鏡的(de)連接。

 

應用(yòng)程序後台運行

雙渲染融合架構的(de)一個(gè)缺點是,與頭戴式架構不同,應用(yòng)程序無法在後台運行,而前台運行另一個(gè)應用(yòng)程序。

 

項目驗證器引起的(de)構建問題

在運行自動構建時(shí),請禁用(yòng)“驗證開放場(chǎng)景”功能設置,有關詳細信息,請參閱“配置雙渲染融合設置”。