遷移指南
雙渲染融合遷移指南
從 Snapdragon Spaces 版本 0.23.0 開始,雙渲染融合不再作(zuò)為(wèi)單獨的 tarball 包提供。現在,樣本和插件組件已包含在 Snapdragon SDK 包中(zhōng)。請參考設置指南,了解如何将樣本引入新(xīn)項目或使用(yòng)舊版雙渲染融合的項目中(zhōng)。
遷移步驟
1、如果項目使用(yòng)的是 0.13.0 至 0.19.1 版本中(zhōng)的預制件,請确保這些預制件已解包,并且不是樣本文(wén)件夾中(zhōng)預制件的變體(tǐ)。
2、如果項目中(zhōng)已經導入了樣本,請删除雙渲染融合樣本文(wén)件夾。
3、将新(xīn)的 Snapdragon Spaces SDK 版本導入到現有(yǒu)項目中(zhōng)。
4、按照設置指南中(zhōng)的“導入樣本”部分(fēn),導入新(xīn)的雙渲染融合樣本。
5、參考設置指南,添加場景中(zhōng)可(kě)能(néng)缺少的組件,并特别關注故障排除部分(fēn)。
版本差異
0.13.0 至 0.19.1 版本 | 0.23.0 及以後版本 | |
屏幕方向 | Lifecycle.cs | FusionScreenSetup.cs |
場景邏輯功能(néng)(退出、切換或切換場景) | Lifecycle.cs | FusionSceneManager.cs |
自動啓動 XR 和管理(lǐ) XR 相機 | DynamicOpenXRLoader.cs | DynamicOpenXRLoader |
OpenXR 生命周期事件 | DynamicOpenXRLoader.cs | FusionLifecycleEvents.cs |
Spaces Glass 狀态 | - | SpacesGlassStatus.cs |
Fusion Editor Simulator 組件 | FusionLogic.cs | FusionSimulator.cs |
版本0.13.0到0.21.0
舊版本雙渲染融合
免責聲明
前提條件
安(ān)裝(zhuāng) Unity 編輯器時,必須添加 Android Build Support 模塊,以便能(néng)夠導出 .apk 文(wén)件。該模塊也可(kě)以在安(ān)裝(zhuāng)後通過 Unity Hub 添加。
開始新(xīn)的 3D Unity 項目
創建一個新(xīn)的 3D(或 3D URP)Unity 項目,或使用(yòng)現有(yǒu)的 Unity 項目。
導入 Snapdragon Spaces 包
Snapdragon Spaces for Unity SDK 以 tarball 文(wén)件形式提供。
請按照 Unity 的說明,通過 Unity 包管理(lǐ)器将 tarball (.tgz) 文(wén)件導入到項目中(zhōng)。該文(wén)件位于 Unity 包文(wén)件夾中(zhōng)。
注意! 導入包後,Unity 可(kě)能(néng)會彈出提示以啓用(yòng)新(xīn)的輸入系統。點擊“是”以确保 OpenXR 和 XR Interaction Toolkit 包的完整功能(néng)。如果還需要使用(yòng)舊的輸入系統,可(kě)以在 Player > Other Settings > Configuration 中(zhōng)将 Active Input Handling 設置為(wèi)“Both”。 |
導入雙渲染融合包
在 Snapdragon Spaces SDK for Unity 版本 0.13.0 到 0.21.0 之間,雙渲染融合公(gōng)測版作(zuò)為(wèi)實驗性包提供。啓用(yòng)此功能(néng)的文(wén)件以單獨的 Unity 包 tarball 形式提供,您可(kě)以在 Snapdragon Spaces for Unity SDK 下載頁(yè)面找到。
請按照 Unity 的說明,通過 Unity 包管理(lǐ)器将 tarball (.tgz) 文(wén)件導入項目。該文(wén)件可(kě)以在雙渲染融合包下載頁(yè)面找到。
建議同時通過包管理(lǐ)器導入 Fusion Samples 示例包。
更改項目設置
要啓用(yòng) Snapdragon Spaces OpenXR 插件,請進入 Edit > Project Settings > XR Plug-in Management 下的項目設置,打開 Android 标簽頁(yè)。
勾選 OpenXR 插件,但暫時不要勾選 Snapdragon Spaces 功能(néng)組。
接着,點擊 OpenXR 菜單項以顯示不同的 OpenXR 功能(néng)選項。注意新(xīn)的“雙渲染融合功能(néng)”,勾選 Base Runtime Feature 和 Dual Render Fusion Feature。點擊 Dual Render Fusion 旁邊的紅色感歎号,以打開項目驗證器。
項目驗證器将顯示多(duō)個修複選項,用(yòng)于更新(xīn) Unity 項目和當前打開的場景,因此請确保在項目中(zhōng)打開了正确的場景。
雙渲染融合功能(néng)驗證器
請注意驗證器中(zhōng)前綴為(wèi) [Dual Render Fusion (Experimental)] 的選項。應該首先解決這些問題,以更新(xīn)項目和當前場景,然後再選擇“全部修複”來處理(lǐ)項目中(zhōng)的其他(tā)問題。(這是因為(wèi)雙渲染融合的驗證器選項可(kě)以解決一些其他(tā)默認的 Spaces 驗證器問題。)
完成雙渲染融合驗證後,點擊剩餘條目旁邊的修複按鈕,以應用(yòng)所需的項目設置。一些修複可(kě)能(néng)需要重新(xīn)啓動編輯器,這是正常的。
此時,雙渲染融合應該已經正确啓用(yòng),可(kě)以進行啓動。有(yǒu)關更多(duō)信息和高級配置功能(néng),請參見下文(wén)。
配置雙渲染融合設置
雙渲染融合功能(néng)的可(kě)用(yòng)設置包括
1、驗證打開的場景:啓用(yòng)此設置時,Unity 場景驗證器将檢查當前打開的場景中(zhōng)是否正确配置了 XR 相機和智能(néng)手機相機。如果項目的構建系統沒有(yǒu)完整的功能(néng)場景(如附加場景),請禁用(yòng)此設置,以避免構建阻塞。
雙渲染融合示例
通過包管理(lǐ)器可(kě)以獲取一系列示例場景和代碼腳本:
1、Controller Prefab Sample Scene:這是一個示例場景,用(yòng)于将 Android Companion Controller 适配到 Unity Prefab 中(zhōng),并完全控制設置和退出按鈕。有(yǒu)關更多(duō)詳細信息,請參見下文(wén)的 Companion Controller 部分(fēn)。
2、CubeManipulation:一個簡單的場景,包含一個立方體(tǐ),可(kě)以通過一個、兩個或三個手指在觸控闆上移動,用(yòng)于創建響應式多(duō)點觸控界面。
3、LandscapeUISampleScene:一個簡單的場景,包含一個橫向畫布,其中(zhōng)包含可(kě)交互的 UI 元素,用(yòng)于操作(zuò)立方體(tǐ)。
4、OpenXRLoadingTest:一個演示如何在智能(néng)手機上立即啓動應用(yòng)程序,并在與眼鏡建立連接後啓用(yòng) OpenXR 的場景。有(yǒu)關更多(duō)詳細信息,請參見下文(wén)的 Dynamic OpenXR Loader 部分(fēn)。
5、PortraitUISampleScene:一個簡單的場景,包含一個縱向畫布,其中(zhōng)包含可(kě)交互的 UI 元素。
伴侶控制器
有(yǒu)些開發者可(kě)能(néng)希望将現有(yǒu)的 Snapdragon Spaces 項目遷移到雙渲染融合,并利用(yòng)伴侶控制器的陀螺儀 3DOF 指向功能(néng)。請按照以下步驟将其添加到項目中(zhōng):
要在 Unity 中(zhōng)複制伴侶控制器,需要一些資産(chǎn)和腳本。
1、如果需要,請按照提示導入 TextMeshPro。
2、将 CanvasControllerCompanion Prefab 從示例中(zhōng)拖到層級視圖中(zhōng)。
3、由于 Prefab 中(zhōng)不包含 XR 相機,需要将兩個 GameObject 連接到 XR 相機。如果沒有(yǒu)設置,這些對象會自動檢測 XR Origin 或 AR Session Origin 以使用(yòng)附加的相機。也可(kě)以手動設置:
在 ControllerPositionHeadMirror 中(zhōng)設置 Ar Camera 字段。
在 GyroRotationReceiver 中(zhōng)設置 Ar Camera 字段。
确保将輸入系統設置為(wèi)“Both”,以啓用(yòng)陀螺儀控制。
5、将 ControllerPrefabInputActions 作(zuò)為(wèi)附加的 Action Asset 添加到 Input Action Manager 中(zhōng)。如果層級視圖中(zhōng)沒有(yǒu) Input Action Manager,請創建一個 GameObject 并添加該組件。
6、要使用(yòng)菜單按鈕功能(néng),可(kě)以直接使用(yòng)标準的 Unity 輸入系統,并在層級視圖中(zhōng)的菜單按鈕對象上添加 On Click() 事件。
7、要在設置菜單中(zhōng)添加更多(duō)選項,請暫時啓用(yòng)“Settings Overlay” GameObject,并将菜單項添加到“Scroll Box”列表中(zhōng)。(目前,“About”按鈕沒有(yǒu)功能(néng),僅作(zuò)為(wèi)示例存在。)
動态 OpenXR 加載器
動态 OpenXR 加載器是一個實驗性示例腳本,允許應用(yòng)程序在眼鏡連接後加載 OpenXR,類似于耳機的工(gōng)作(zuò)方式。此腳本會檢測第二個顯示器的存在,并在配置時啓動 OpenXR。提供了多(duō)個回調函數,用(yòng)于控制 OpenXR 開始連接時用(yòng)戶界面的行為(wèi)。有(yǒu)關如何使用(yòng)此腳本的示例,請參見 OpenXRLoadingTest 示例。
注意事項! 1、目前不建議在啓用(yòng)手部跟蹤功能(néng)的應用(yòng)程序中(zhōng)使用(yòng)此功能(néng),由于動态 OpenXR 加載器與手部跟蹤功能(néng)存在并發兼容性問題,使用(yòng)此功能(néng)在應用(yòng)程序初始化過程之外啓動 OpenXR 可(kě)能(néng)會導緻應用(yòng)程序在嘗試加載時突然退出。此問題将在未來版本中(zhōng)修複。 2、當 OpenXR 開始連接時,主線(xiàn)程會短暫阻塞。建議顯示一些用(yòng)戶界面元素,以提示 OpenXR 正在連接,并在加載完成後顯示确認狀态。 |
功能(néng)驗證配置
雙渲染融合功能(néng)驗證器用(yòng)于輕松配置 Unity 項目和所選場景,以啓用(yòng)雙渲染融合。以下是驗證列表。
範圍 | 驗證項 | 描述 | 原因 |
項目 | 禁用(yòng)自定義啓動器 | 禁用(yòng)“Base Runtime Feature”中(zhōng)的“Launch on Viewer”和“Launch Controller on Host”複選框 | 雙渲染融合需要禁用(yòng)自定義啓動器功能(néng)(參見頭戴式架構) |
場景 | 需要 AR 會話原點 | 确保場景中(zhōng)有(yǒu) AR 會話原點(或 XR 原點)以及相關的 XR 攝像頭 | AR Foundation 需要一個 XR 攝像頭 |
場景 | 需要 AR 會話 | 确保場景中(zhōng)有(yǒu) AR 會話和 AR 輸入管理(lǐ)器 | AR Foundation 需要一個 AR 會話 |
場景 | 需要移動攝像頭 | 确保場景中(zhōng)有(yǒu)一個表示移動設備屏幕的 Unity 攝像頭 | 雙渲染融合需要一個移動顯示器進行渲染 |
場景 | 主攝像頭标簽 | 确保隻有(yǒu) XR 攝像頭或其他(tā)非紋理(lǐ)渲染的攝像頭被标記為(wèi)“主攝像頭”,而不是兩個都标記 | 如果有(yǒu)兩個攝像頭被标記為(wèi)“主攝像頭”,可(kě)能(néng)會導緻渲染錯誤或幹擾其他(tā)依賴項 |
場景 | 攝像頭渲染優先級 | 确保移動攝像頭的渲染在 XR 攝像頭之後進行 | 如果 XR 攝像頭在移動攝像頭之前渲染,移動顯示器可(kě)能(néng)會被 XR 攝像頭的圖像覆蓋 |
場景 | 攝像頭視角目标 | 确保 XR 攝像頭的視角目标設置為(wèi)“Both”,而其他(tā)所有(yǒu)攝像頭設置為(wèi)“None” | 攝像頭視角目标決定了每個攝像頭将渲染到哪個顯示器上 |
場景 | 移動攝像頭視角目标(URP) | 顯示警告,提醒檢查移動攝像頭的視角目标是否設置為(wèi)“None” | URP 不能(néng)像内置渲染管線(xiàn)那樣程序化地設置視角目标,因此需要手動檢查 |
場景 | 攝像頭顯示目标 | 如果 XR 攝像頭的目标顯示器不是顯示器 1,則建議添加一個 Fusion Logic GameObject 和組件 | 為(wèi)了使雙渲染融合能(néng)夠正确地渲染到兩個設備,兩個顯示目标必須設置為(wèi)顯示器 1。XR 攝像頭默認設置為(wèi)目标顯示器 2,而“Fusion Logic”會在運行時将目标設置為(wèi)正确的顯示器 |
場景 | 音頻監聽器 | 如果場景中(zhōng)有(yǒu)多(duō)個音頻監聽器,建議關閉其中(zhōng)一個 | 多(duō)個音頻監聽器同時存在會導緻 Unity 出現問題 |
場景 | 事件系統要求 | 如果場景中(zhōng)沒有(yǒu)事件系統,則需要添加一個事件系統和默認輸入模塊 | 這是為(wèi)了确保觸控 UI 能(néng)夠正确處理(lǐ) |
應用(yòng)程序在後台運行
雙渲染融合架構的一個缺點是,應用(yòng)程序不能(néng)像頭戴式架構那樣在後台運行,同時其他(tā)應用(yòng)程序在前台運行。可(kě)以通過使用(yòng) Android 的畫中(zhōng)畫模式來克服這一限制,這種方式利用(yòng)了标準的 Android 架構選項。