讓頭顯支援 EasyAR
本文介紹如何使用 EasyAR Sense Unity Plugin 的頭顯擴展包模板來開發一個支援頭顯設備的 EasyAR 擴展包。
開始之前
在進入開發之前,需要先了解如何使用 EasyAR Sense Unity Plugin。
- 快速入門
- 執行 AR Session 範例、影像追蹤範例 ImageTracking_Targets 和稠密空間地圖範例 SpatialMap_Dense_BallGame,它們的執行效果在手機上和頭顯上是相似的。
頭顯外掛程式開發會涉及一些基礎功能,需要先了解這些內容:
- 了解 AR Session
- 了解 幀資料來源 和 外部幀資料來源
此外,還需要熟悉 如何開發一個 Unity 的 package。
為 AR/MR 準備裝置
準備運動追蹤/VIO 系統
確保設備追蹤誤差受控。一些 EasyAR 功能比如 Mega 可以在某種程度上降低裝置累積誤差,但大的局部誤差也會讓 EasyAR 的演算法變得不穩定。通常來講,通常我們期望 VIO 漂移在 1‰ 以內。
準備顯示系統
確保當一個與現實中某個物體大小和輪廓相同的虛擬物體被放置在虛擬世界中,且它與虛擬攝影機的相對變換關係與真實世界中對應物體與裝置的變換關係相同時,虛擬物體可以貼合顯示在真實物體上,且移動裝置或轉頭不會打破顯示效果。可以參考 Vision Pro 的效果。
準備裝置 SDK
確保已經有 API 可以提供 外部輸入幀資料 。這些資料應該由系統中的兩個且只有兩個時間點產生,需要確保不會出現資料無法對齊的情況。
使用頭顯擴展包模板
透過 Unity 的 Package Manager window 來 使用本地 tarball 文件安裝外掛程式 匯入 EasyAR Sense Unity Plugin (package com.easyar.sense)。解壓頭顯擴展模板 (package com.easyar.sense.ext.hmdtemplate)到 Unity 工程的 Packages 目錄,並重新命名 Samples~ 資料夾為 Samples 。
這時應看到這樣的目錄結構:
.
├── Assets
└── Packages
└── com.easyar.sense.ext.hmdtemplate
├── CHANGELOG.md
├── Documentation~
├── Editor
├── LICENSE.md
├── package.json
├── Runtime
└── Samples
└── Combination_BasedOn_HMD
提示
如有需要,可以使用任何 Unity 允許的方式來匯入 EasyAR Sense Unity Plugin 和存放頭顯擴展模板。
如果不使用模板,也可以參考 Unity 建立自訂 package 的指南 來建立一個新的 package。
如果裝置 SDK 未使用 Unity 的 package 來組織,需要解壓頭顯擴展模板到 Unity 的 Assets 資料夾,然後從解壓的檔案中刪除 package.json 以及任何以 .asmdef 為副檔名的檔案。請注意在這種使用方式下,同時使用裝置 SDK 與 EasyAR 的用戶將無法獲得合理的版本依賴。
完成執行時輸入擴展
遵循 建立影像和裝置運動資料輸入擴展 方法,修改 Runtime/HMDTemplateFrameSource.cs 並完成適用於頭顯的輸入擴展。這是擴展包最主要的開發工作。
完成編輯器選單
修改 MenuItems 類別中的 "HMD Template" 字串為代表裝置的名稱。如果需要其它自訂編輯器功能,也可以新增其它指令碼。
開發者在 Hierarchy 檢視中選中 AR Session (EasyAR) 並點選右鍵時會出現這些選單項:
EasyAR Sense>Extensions>Frame Source : [Device Name]:在當前 session 中新增一個該裝置的幀資料來源。EasyAR Sense>Extensions>Frame Source : [Device Name (keep it only)]:在當前 session 中新增並僅保留一個該裝置的幀資料來源。

完成應用範例
範例位於 Samples/Combination_BasedOn_HMD。簡單起見,範例模板中沒有程式碼,全部 AR 功能靠場景內容及設定即可完成。
新增支援裝置執行的內容到場景中。
提示
如有需要,也可以反過來做,使用一個可以在裝置上執行的場景,然後新增 EasyAR 元件和 sample 場景中的其它物體到場景中。
修改設計用來放在 session 原點下的物體。
如果場景中定義了 session 原點,移動
EasyARPanda和UI到原點節點下。
EasyARPanda會提供一個裝置運動追蹤行為的參照,這會幫助判斷追蹤不穩定時候的原因。這些物體名稱括號內的文字是給擴展開發者看的提示,可以刪除:
(Move into Origin if there is any)(Move into Origin if there is any, set constraint source to your rendering camera)
設定
HUD按鈕行為。設定
UI的 constraint source 為虛擬攝影機,以確保HUD按鈕可以按預期工作。
設定
Canvas的 raycast 功能。修改
UI節點下的Canvas,確保 raycast 可以工作,以保證所有 UI 按鈕和開關可以按預期工作。模板中已經在
Canvas節點下預先新增了 XR Interaction Toolkit 的 Tracked Device Graphic Raycaster,匯入對應的 package 之後即可看到。
如果在裝置上執行時不使用 XR Interaction Toolkit,會看到類似下面的缺少指令碼提示,可以將其刪除,並新增裝置所需的 raycaster 元件。

後續步驟
- 在進一步完成擴展包之前,需要先 執行驗證(bring-up) 輸入擴展
- 全部完成之後,可以準備 發佈擴展包