Share via


將 HoloLens (第1代) 應用程式移植到 HoloLens 2

本指南是量身打造,可協助開發人員使用適用於 HoloLens 的現有 Unity 應用程式(第 1 代)將其應用程式移植到 HoloLens 2 裝置。 將 HoloLens (第 1 代) Unity 應用程式移植到 HoloLens 2 的作業有四個重要步驟。

下列各節將詳細說明每個階段的資訊:

步驟 1 步驟 2 步驟 3 步驟 4
Visual Studio 標誌 Unity 標誌 Unity 圖示 MRTK 標誌
下載最新工具 更新 Unity 專案 針對 ARM 進行編譯 遷移至 MRTK v2

必要條件

強烈建議您在開始移植程式之前,使用原始檔控制來儲存應用程式原始狀態的快照集。 我們也建議您在程式期間於各種時間儲存檢查點狀態。 您可能會發現在 Unity 中開啟另一個原始應用程式的實例會很有説明,因此您可以在移植程式期間並排比較。

注意

移植之前,請確定您已安裝適用於 Windows Mixed Reality 開發的最新工具。 對大部分現有的 HoloLens 開發人員來說,這涉及更新至最新版的 Visual Studio 2019,以及安裝適當的 Windows SDK。 以下內容將進一步說明不同的 Unity 版本和混合實境工具組 (MRTK) 第 2 版。

如需詳細資訊,請參閱 安裝工具

將您的項目移轉至最新版本的 Unity

如果您使用 MRTK v2,建議您先更新至 MRTK 2.7,再將項目升級至 Unity 2020.3 LTS。 MRTK 2.7 支援 Unity 2018、2019 和 2020,讓您確保在升級 Unity 之前,您的專案已準備好用於 Unity 2020。 評估您專案中目前存在的任何 外掛程式相依性 ,並判斷是否可以針對ARM64建置這些 DLL。 針對具有硬式 ARM 相依外掛程式的專案,您可能需要繼續建置適用於 ARM 的應用程式。

更新 Unity 中的場景/專案設定

更新至 Unity 2020.3 LTS 之後,建議您更新 Unity 中的特定設定,以取得裝置上的最佳結果。 Unity 的建議設定底下會詳述這些設定。

若要重申,Unity 2018 中即將淘汰 .NET 腳本後端,並自 Unity 2019 起移除。 您應該強烈考慮將專案切換至 IL2CPP

注意

IL2CPP 腳本後端可能會導致從 Unity 到 Visual Studio 的建置時間較長。 開發人員應設定其開發人員機器,以 優化 IL2CPP 建置時間。 您也可以受益於設定 快取伺服器,特別是針對具有大量資產的 Unity 專案(不包括腳本檔案),或不斷變更場景和資產。 開啟專案時,Unity 會將符合資格的資產以內部快取格式儲存在開發機器上。 項目必須重新匯入,且在修改後必須重新處理。 此程式可以完成一次、儲存在快取伺服器中,然後與其他開發人員共用以節省時間,而不是處理本機重新匯入新變更的每個開發人員。

解決任何因移至更新的 Unity 版本而造成的重大變更之後,請在 HoloLens 上建置及測試您目前的應用程式(第 1 代)。 這是建立認可並儲存至原始檔控制的好時機。

針對 ARM 處理器編譯相依性/外掛程式

HoloLens (第 1 代) 會在 x86 處理器上執行應用程式;HoloLens 2 使用 ARM 處理器。 現有的 HoloLens 應用程式必須移植過去才能支援 ARM。 如先前所述,Unity 2018 LTS 支援編譯 ARM32 應用程式,而 Unity 2019 和更新版本則支援編譯 ARM32 和 ARM64 應用程式。 建議針對 ARM64 應用程式進行開發,因為效能有重大差異。 但要這麼做,所有的外掛程式相依性也必須針對 ARM64 來建置。

請檢閱您的應用程式中所有的 DLL 相依性。 建議移除專案不再需要的相依性。 至於其餘的必要外掛程式,則請將個別的 ARM32 或 ARM64 二進位檔案嵌入至您的 Unity 專案中。

擷取相關的 DLL 之後,請從 Unity 建置 Visual Studio 解決方案,並在 Visual Studio 中編譯適用於 ARM 的 AppX,以確認您的應用程式可以針對 ARM 處理器建置。 建議您將應用程式儲存為原始檔控制解決方案中的認可。

重要

將建置目標變更為 ARM 之後,可以使用 MRTK v1 的應用程式在 HoloLens 2 上執行,前提是符合所有其他需求。 這包括確定您具有所有外掛程式的 ARM 版本。 不過,您的應用程式無法存取 HoloLens 2 特定功能,例如清楚的手部和眼球追蹤。 MRTK v1 和 MRTK v2 有不同的命名空間,可讓兩個版本位於相同專案中,這對於不同版本的轉換很有幫助。

更新至 MRTK 第 2 版

MRTK 第 2 版 是 Unity 上的新工具組,支援 HoloLens (第1代) 和 HoloLens 2。 其也是 HoloLens 2 所有新增功能的所在位置,例如手動互動和眼球追蹤。

如需使用 MRTK 第 2 版的詳細資訊,請查看下列資源:

準備進行移轉

在擷取 MRTK v2 的新 *.unitypackage 檔案之前,建議您先清查任何與 MRTK v1 整合的自定義建置程式代碼,以及 (2) 任何用於輸入互動或 UX 元件的自定義建置程式代碼。 內嵌 MRTK v2 的混合實境開發人員會在輸入和互動方面遇到最常見也最普遍的衝突。 建議您檢閱 MRTK v2 輸入模型

終於,新的 MRTK v2 已從指令碼和場景中管理員物件的模型轉換為設定和服務提供者架構。 這會讓場景階層和架構模型更為簡潔,但需要花一段時間學習才能了解新的組態設定檔。 請閱讀混合實境工具組設定指南,開始熟悉您必須調整為應用程式需求的重要設定和配置檔。

遷移專案

匯入 MRTK v2 之後,Unity 專案很可能會有許多編譯器相關錯誤。 這些是常見的,因為新的命名空間結構和元件名稱。 將文稿修改為新的命名空間和元件,以繼續解決這些錯誤。

如需 HTK/MRTK 和 MRTK 第 2 版之間特定 API 差異的詳細資訊,請參閱 MRTK 第 2 版 Wiki 上的移植指南。

最佳作法

  • 提供 MRTK 標準著色器之前
  • 一次處理一個中斷性變更類型(例如:IMixedRealityFocusHandler 的 IFocusable)。
  • 每次變更後都進行測試,並使用原始檔控制。
  • 盡可能使用預設的 MRTK UX (按鈕、靜態圖像等)。
  • 避免直接修改 MRTK 檔案;請建立 MRTK 元件的包裝函式。
    • 此動作可簡化未來的 MRTK 擷取和更新。
  • 檢閱和探索 MRTK 中提供的場景範例,尤其是 HandInteractionExamples.scene
  • 重建有四色、collider 和 TextMeshPro 文字的畫布式 UI。
  • 啟用 深度緩衝區共用設定焦點;為提升效能,請使用16位深度緩衝區。 請確定當您呈現色彩時,也會呈現深度。 對於透明和文字 gameobject,Unity 通常不會寫入深度。
  • 選取 [單一傳遞實例轉譯]。
  • 使用 Hololens 2 的 MRTK 組態設定檔

測試應用程式

在 MRTK 第 2 版中,您可以直接在 Unity 中模擬手部互動,並對新的 API 開發手部互動和眼球追蹤。 必須要有 HoloLens 2 裝置,才能建立令人滿意的使用者體驗。 建議您研究檔與工具,以進一步瞭解。 MRTK v2 支援在 HoloLens(第 1 代)和傳統輸入模型上進行開發,例如「透過空中點選選取」,可以在 HoloLens(第 1 代)上進行測試。

更新 HoloLens 2 的互動模型

警告

如果您的專案使用任何 XR。WSA API 請注意,這些 API 正逐步淘汰,以在未來的 Unity 版本中淘汰 Unity 的新 XR 輸入 API。 您可以在這裡找到更多關於 XR 輸入 API 的資訊。

移植應用程式並讓其做好使用 HoloLens 2 的準備之後,您就可以開始考慮更新互動模型和全像投影設計/位置。 在 HoloLens (第 1 代) 中,應用程式的注視並認可互動模型所使用的全像投影可能太遠而無法融入視野。

若要更新您的應用程式設計,以最適合 HoloLens 2:

  1. MRTK 元件:根據前置工作,如果您新增 MRTK v2,有各種元件/腳本可用來運用已針對 HoloLens 2 進行設計和優化。
  2. 互動模型:請考慮更新您的互動模型。 在大部分案例中,建議您從注視切換並認可為手部。 部分全像投影可能觸手不及,切換至手部會導致遠距互動指向光線和抓取手勢。
  3. 全像投影放置:切換至手部互動模型之後,請考慮將一些全像投影移到更近的位置,讓使用者可以使用近互動抓取手勢與手部直接互動。 要更接近直接抓取或互動的全像投影類型如下:
  • 小型目標功能表
  • 控制項
  • 按鈕
  • 較小的全像投影,當抓取並檢查時,符合 HoloLens 2 檢視字段。

應用程式和案例會有所不同;我們會繼續根據意見反應和持續學習來精簡和張貼設計指引。

將應用程式從 x86 移至 ARM 的其他秘訣

  • 直接的 Unity 應用程式很簡單,因為您可以建置 ARM 應用程式套件組合,或直接部署到裝置以執行套件組合。 部分 Unity 原生外掛程式在開發上可能會有某些挑戰。 因此,您必須將所有 Unity 原生外掛程式升級至 Visual Studio 2019,並針對 ARM64 進行重建。

  • 一個應用程式使用 Unity AudioKinetic Wwise 外掛程式。 使用中的 Unity 版本沒有 UWP ARM 外掛程式,而且相當努力地將音效功能重新處理到有問題的應用程式中,以在 ARM 上執行。 請確定您已在 Unity 中安裝開發計畫所需的所有必要外掛程式,且可供使用。

  • 在某些情況下,應用程式所需的外掛程式可能沒有 UWP/ARM 外掛程式,因此無法將應用程式移植到 HoloLens 2 並執行。 請連絡您的外掛程式提供者以解決問題,並提供對 ARM 的支援。

  • 著色器中的 minfloat (和 min16float、minint 等變化) 在 HoloLens 2 上和在 HoloLens (第一代) 上的行為可能會不一樣。 具體來說,這些數字會保證至少會使用指定的位元數。 在 Intel/Nvidia GPU 上,minfloat 多半會當作 32 位元來處理。 在 ARM 上則會實際採用指定的位元數。 實際上,這些數位在 HoloLens 2 上的精確度或範圍可能比 HoloLens (第 1 代) 小。

  • _asm 指令似乎無法在 ARM 上運作,這表示任何使用 _asm 指令的程式碼必須重寫。

  • ARM 不支援 SIMD 指令集,因為在 ARM 上無法使用 xmmintrin.h、emmintrin.h、tmmintrin.h 和 immintrin.h 等多種標頭。

  • ARM 上的著色器編譯器會在第一次繪製呼叫期間,於著色器已載入或著色器所相依的某個項目有所變更後執行,而不是在著色器載入時執行。 視需要編譯多少著色器而定,對幀速率的影響可能明顯,並影響著色器在 HoloLens 2 與 HoloLens (第 1 代) 上的處理、封裝和更新方式。

另請參閱