雙重渲染融合組件
本節詳細介紹了(le)所有用(yòng)于雙重渲染融合的(de)新組件。
雙渲染融合設置指南(nán)中的(de)“應用(yòng)項目驗證器修複”步驟爲場(chǎng)景添加了(le)附加組件。
您可(kě)以使用(yòng)附加工具手動創建這(zhè)些遊戲對(duì)象,這(zhè)些工具可(kě)以通(tōng)過右鍵點擊場(chǎng)景層級并選擇 XR > 雙重渲染融合 來(lái)找到。或者通(tōng)過菜單欄中的(de) GameObject > XR > Dual Render Fusion 進行訪問。
動态 OpenXR 加載器組件
動态Open XR 加載器組件允許應用(yòng)程序在連接眼鏡後加載 Open XR,類似于耳機的(de)工作方式。此組件與 Spaces Glass Status 組件配合使用(yòng),後者用(yòng)于檢測支持的(de)眼鏡是否存在,并在配置允許的(de)情況下(xià)啓動 Open XR。
該組件提供了(le)多(duō)個(gè)回調函數,用(yòng)于在 OpenXR 開始連接時(shí)控制用(yòng)戶界面的(de)行爲,這(zhè)些回調函數通(tōng)過 Fusion Lifecycle Events 組件對(duì)開發人(rén)員(yuán)開放。
動态 OpenXR 加載器屬性
顯示器連接時(shí)自動啓動 XR:啓用(yòng)此選項後,當連接任何支持的(de)眼鏡時(shí),應用(yòng)程序會自動啓動 OpenXR。如果禁用(yòng)此選項,開發人(rén)員(yuán)需要在需要 XR 時(shí)手動調用(yòng) Dynamic OpenXR Loader 組件的(de) StartOpenXR 方法。
開發人(rén)員(yuán)可(kě)以通(tōng)過調用(yòng)以下(xià)方法手動啓動和(hé)停止 OpenXR:
StartOpenXR 隻有在連接了(le)支持的(de)眼鏡時(shí)才能成功,請參見 Spaces Glass Status 組建。
自動管理(lǐ) XR 相機:啓用(yòng)此選項後,當 OpenXR 啓動或停止時(shí),将根據需要自動啓用(yòng)或禁用(yòng)包含 AR Session 和(hé) AR Session Origin 的(de)遊戲對(duì)象。
Spaces Glass Status 組件
Spaces Glass Status 組件用(yòng)于獲取應用(yòng)程序運行設備的(de)信息,并獲取與眼鏡連接狀态相關的(de)信息。
該組件通(tōng)過 Fusion Lifecycle Events 組件向開發人(rén)員(yuán)提供回調功能。
開發人(rén)員(yuán)還(hái)可(kě)以通(tōng)過代碼在運行時(shí)查詢以下(xià)數據:
Spaces Glass Status 可(kě)用(yòng)數據
眼鏡連接狀态:
獲取眼鏡的(de)連接狀态。
● 眼鏡的(de)連接狀态可(kě)以是“斷開連接”或“已連接”
眼鏡活躍狀态:
獲取眼鏡的(de)活躍狀态
● 眼鏡的(de)活躍狀态可(kě)以是“活躍”或“閑置”。
● 如果眼鏡處于“斷開連接”狀态,則不能是“活躍”狀态。
● “閑置”表示眼鏡沒有被佩戴,可(kě)能是由于接近傳感器超時(shí)等原因,這(zhè)可(kě)以作爲提示,通(tōng)過降低渲染質量或減少高(gāo)強度代碼部分(fēn)的(de)工作量來(lái)節省電力。
設備類型:
獲取眼鏡的(de)設備類型。
● 設備類型分(fēn)爲幾個(gè)大(dà)類,這(zhè)些類别可(kě)以幫助應用(yòng)程序決定如何在特定類别的(de)設備上最佳展示内容。
● 設備類型包括“無”、“一體機”、“有線”或“無線”
○ “無”表示眼鏡的(de)連接狀态當前爲“斷開連接”。
○ “一體機”指的(de)是一體化(huà)眼鏡類型(如 MR 或 VR 頭顯)。
○ “有線”指通(tōng)過電纜連接到智能手機的(de) AR 眼鏡。
○ “無線”指通(tōng)過無線方式連接到智能手機的(de) AR 眼鏡。
Spaces Host View 組件
Spaces Host View 組件在應用(yòng)程序運行于不支持 Dual Render Fusion 的(de) MR/VR 設備時(shí),動态禁用(yòng)智能手機的(de)顯示。
該組件還(hái)提供開發人(rén)員(yuán)可(kě)用(yòng)的(de)回調函數,用(yòng)于根據需要啓用(yòng)或禁用(yòng)其他(tā)功能,例如爲 MR/VR 設備啓用(yòng)替代 UI,這(zhè)些回調通(tōng)過 Fusion Lifecycle Events 組件向開發人(rén)員(yuán)提供。
該組件包括用(yòng)于渲染到智能手機顯示的(de)相機。
Fusion Lifecycle Events 組件
Fusion Lifecycle Events 組件收集所有與 Dynamic OpenXR Loader、Spaces Glass Status 和(hé) Spaces Host View 組件相關的(de)事件。
Fusion Lifecycle Events 屬性
當啓用(yòng)“在場(chǎng)景加載時(shí)重新廣播”選項時(shí),Fusion Lifecycle Events 組件可(kě)以在切換場(chǎng)景時(shí)重新廣播“On OpenXR Available”、“On OpenXR Unavailable”、“On OpenXR Started”和(hé)“On OpenXR Stopped”事件,這(zhè)使得(de)在場(chǎng)景加載完成後,可(kě)以根據當前連接設備的(de)能力進行适當的(de)配置。
當 OpenXR 可(kě)用(yòng)
● 當 Dynamic OpenXR Loader 組件啓用(yòng)時(shí),或者在嘗試啓動 OpenXR 之前和(hé)停止 OpenXR 之後,這(zhè)個(gè)事件會被廣播。
● 當眼鏡連接并完全檢測到時(shí),會廣播這(zhè)個(gè)事件。這(zhè)表示 OpenXR 可(kě)以被初始化(huà),但 OpenXR 尚未處于活動狀态。
● 該事件在眼鏡與兼容的(de)運行時(shí)環境連接并被檢測到時(shí)觸發,但需要注意的(de)是,應用(yòng)程序在訪問 OpenXR 功能之前,OpenXR 仍需初始化(huà)。
● 眼鏡的(de)連接狀态可(kě)以随時(shí)通(tōng)過 SpacesGlassStatus.Instance.GlassConnectionState 查詢。
當 OpenXR 不可(kě)用(yòng)
● 當 Dynamic OpenXR Loader 組件啓用(yòng)時(shí),或者在嘗試啓動 OpenXR 之前和(hé)停止 OpenXR 之後,這(zhè)個(gè)事件會被廣播。
● 當眼鏡斷開連接時(shí),會廣播這(zhè)個(gè)事件。這(zhè)表示 OpenXR 無法被初始化(huà),也(yě)未處于活動狀态。
● 未檢測到 OpenXR 路徑,說明(míng)眼鏡已斷開連接,需要重新連接才能啓用(yòng) OpenXR 功能。
● 眼鏡的(de)連接狀态可(kě)以随時(shí)通(tōng)過 SpacesGlassStatus.Instance.GlassConnectionState 查詢。
OpenXR 啓動時(shí)
● 在 OpenXR 初始化(huà)之後、OpenXR 子系統啓動之前,會廣播這(zhè)個(gè)事件。
● 此時(shí)應明(míng)确哪些 OpenXR 功能已啓用(yòng)并正确初始化(huà),但子系統尚未運行。
OpenXR 啓動後
● 在 OpenXR 子系統啓動後,會廣播這(zhè)個(gè)事件。
● 此時(shí),所有 XR 内容都應可(kě)用(yòng)。
● 開發者應訂閱這(zhè)個(gè)事件,以便在場(chǎng)景中啓動可(kě)選的(de) XR 内容。
● 在這(zhè)個(gè)事件廣播後,可(kě)以安全地使用(yòng) OpenXR 功能,直到廣播停止事件。
OpenXR 停止時(shí)
● 在 OpenXR 子系統停止并在 OpenXR 加載器反初始化(huà)之前,會廣播這(zhè)個(gè)事件。
● 開發者應訂閱這(zhè)個(gè)事件,以便在安全的(de)情況下(xià)關閉需要 OpenXR 的(de)内容。
● 當這(zhè)個(gè)事件被調用(yòng)時(shí),開發者必須立即停止使用(yòng)任何 OpenXR 功能。
OpenXR 停止後
● 在 OpenXR 子系統停止後,OpenXR 加載器反初始化(huà)完成時(shí),會廣播這(zhè)個(gè)事件。
● 當接收到這(zhè)個(gè)事件時(shí),OpenXR 未加載。
● 功能可(kě)以被查詢以查看是否計劃使用(yòng),但實際上不可(kě)用(yòng)。
OpenXR 子系統未運行
● 在這(zhè)個(gè)事件之後,會立即廣播可(kě)用(yòng)性,指示 OpenXR 是否可(kě)以重新啓動(眼鏡是否連接)。
空閑狀态
● 當眼鏡處于空閑狀态時(shí)(例如,眼鏡被放下(xià)且未佩戴時(shí)),會廣播此事件(例如,由于接近傳感器超時(shí)觸發)。
● 這(zhè)可(kě)以作爲降低渲染質量或減少僅 XR 内容更新優先級以節省電量的(de)提示。
● 眼鏡的(de)活動/空閑狀态可(kě)以随時(shí)通(tōng)過 SpacesGlassStatus.Instance.GlassActiveState 查詢。
活動狀态
當眼鏡處于活動狀态時(shí)(例如,正在佩戴并顯示内容),會廣播此事件。
如果眼鏡斷開連接,則無法處于活動狀态。
眼鏡的(de)活動/空閑狀态可(kě)以随時(shí)通(tōng)過 SpacesGlassStatus.Instance.GlassActiveState 查詢。
主視圖啓用(yòng)
● 使用(yòng)支持雙渲染融合的(de)設備時(shí),會觸發“主視圖啓用(yòng)”事件,此時(shí),應用(yòng)程序可(kě)以選擇适當顯示或隐藏元素。例如,在 AR 設備上啓用(yòng)雙渲染融合主視圖。
● 這(zhè)并不表示是否有支持的(de) AR 設備連接到主設備。
主視圖禁用(yòng)
● 使用(yòng)不支持雙渲染融合的(de)設備時(shí),會觸發“主視圖禁用(yòng)”事件。此時(shí),應用(yòng)程序可(kě)以選擇适當顯示或隐藏元素。例如,在 MR/VR 設備上啓用(yòng)替代的(de)用(yòng)戶界面元素。
● 這(zhè)表示沒有有效的(de)主設備(智能手機),且 SpacesGlassStatus.Instance.DeviceType 可(kě)能是 Aio。
融合模拟器組件
爲了(le)啓用(yòng)雙渲染融合編輯器模拟,必須将融合模拟器組件添加到場(chǎng)景中。該組件與 Spaces 主視圖一起,處理(lǐ)攝像機邏輯,以便在 Unity 編輯器的(de)顯示屏 1 和(hé) 2 上正确顯示雙渲染融合應用(yòng)程序。
要使該組件正常工作,必須在雙渲染融合 OpenXR 功能設置中啓用(yòng) SimulateFusionDevice 選項,更多(duō)信息請參閱配置雙渲染融合設置。
Fusion 屏幕設置
Fusion屏幕設置組件包含強制智能手機屏幕方向爲縱向或橫向的(de)邏輯。
這(zhè)是一個(gè)可(kě)選組件。
它展示了(le)如何在 Unity 運行時(shí)正确設置智能手機屏幕方向,例如調用(yòng) Screen.orientation = ScreenOrientation.Portrait;。調用(yòng) Screen.orientation 設置時(shí)必須确保啓用(yòng)了(le)雙渲染融合功能,否則可(kě)能會改變 MR/VR 頭戴設備屏幕的(de)方向,導緻顯示異常。
樣本中的(de)組件
某些組件僅包含在示例中。
伴侶控制器
一些開發者希望将現有的(de) Snapdragon Spaces 項目遷移到使用(yòng)雙渲染融合,以利用(yòng)伴侶控制器的(de)陀螺儀 3DOF 指向功能。請按照(zhào)以下(xià)步驟将其添加到項目中。
要在 Unity 中複制伴侶控制器,需要幾個(gè)資源和(hé)一些腳本。
1、導入樣本。
2、如果需要,在提示時(shí)導入 TextMeshPro。
3、從 Assets > Samples > Snapdragon Spaces > [Snapdragon Spaces 版本] > Fusion Samples > Prefabs 中,将 CanvasControllerCompanion 預制件從導入的(de)樣本拖到層級視圖中。
4、由于預制件中不包含 XR 攝像機,可(kě)能需要将兩個(gè)遊戲對(duì)象連接到 XR 攝像機。如果未設置,XR Origin 或 AR Session Origin 會在運行時(shí)自動檢測并使用(yòng)附加的(de)攝像機。或者,也(yě)可(kě)以在 ControllerPositionHeadMirror 的(de) Ar Camera 字段中手動設置它們。
在 GyroRotationReceiver 的(de) Ar Camera 字段中進行設置。
5、确保 Active Input Handling 設置爲 Both ,以啓用(yòng)陀螺儀控制:
這(zhè)一步應該由雙渲染融合設置指南(nán)中的(de)“應用(yòng)項目驗證器修複”步驟正确處理(lǐ)。
6、從 Assets/Samples/Snapdragon Spaces/[Snapdragon Spaces 版本]/Fusion Samples/Controller/Input Actions 中,添加 ControllerPrefabInputActions 作爲 Input Action Manager 的(de)附加操作資産。
如果層級視圖中沒有 Input Action Manager,請先創建一個(gè)空的(de) GameObject 并添加該組件。
7、要使用(yòng)菜單按鈕功能,可(kě)以使用(yòng)标準的(de) Unity 輸入系統,并在層級視圖中菜單按鈕的(de) Button 對(duì)象上添加一個(gè) On Click() 事件。
8、要在設置菜單中添加更多(duō)選項,可(kě)以暫時(shí)啓用(yòng) Settings Overlay 遊戲對(duì)象,并在滾動框列表中添加菜單項。(目前,About 按鈕沒有功能,僅作爲示例。)