錨點示例
此示例演示了(le)如何創建和(hé)銷毀本地錨點,以準确跟蹤現實世界中的(de)一個(gè)點。有關錨點的(de)基本信息以及 AR Foundation 的(de) AR Anchor Manager 組件的(de)功能,請參考 Unity 文檔。要使用(yòng)此功能,需要在 OpenXR 插件設置中啓用(yòng)該選項,路徑爲:項目設置 > XR 插件管理(lǐ) > OpenXR (> Android 标簽)。
示例工作原理(lǐ)
首先,請确保在 OpenXR 項目設置中啓用(yòng)了(le)空間錨點功能。
爲了(le)放置錨點,一個(gè)透明(míng)的(de)放置工具将浮動在攝像機中心,距離爲 1 米。如果啓用(yòng)了(le)“在表面上放置錨點”切換按鈕,每幀都會從頭部中心向前發射一條射線,以确定放置工具相對(duì)于現實世界平面的(de)定位。如果檢測到碰撞,放置工具會變爲黃(huáng)色。然後,點擊主控制器上的(de)觸控闆或與可(kě)見的(de) UI 面闆上的(de)凝視交互(如果選中凝視交互器),将會實例化(huà)一個(gè)空的(de) GameObject 和(hé)一個(gè) ARAnchor GameObject。空的(de) GameObject 具有一個(gè)透明(míng)的(de)工具網格,并由 AR Session 進行跟蹤。AR 錨點工具将通(tōng)過 ARAnchorManager 的(de) anchorsChanged 事件進行更新,以表示其跟蹤狀态。
銷毀所有錨點
通(tōng)過點擊 UI 中的(de)“銷毀所有錨點”按鈕,可(kě)以銷毀所有錨點和(hé)工具。爲了(le)防止在所有内容删除後再次使用(yòng)“選擇”按鈕創建新的(de)錨點,删除命令會有延遲發出。
Spaces 錨點存儲
通(tōng)過在 AR Anchor Manager 旁邊添加 Spaces Anchor Store 組件,可(kě)以将錨點本地保存,以便在後續會話(huà)中識别和(hé)跟蹤。該組件提供了(le)以下(xià) API,用(yòng)于加載和(hé)保存錨點、删除保存的(de)錨點以及清除本地錨點存儲。
在這(zhè)部分(fēn)信息遷移到腳本 API 之前,以下(xià)是這(zhè)些方法的(de)簡要說明(míng):
● ClearStore
○ 清除本地錨點存儲。
● SaveAnchor
○ 通(tōng)過指定的(de)名稱或生成的(de)哈希值保存 AR Anchor 對(duì)象,保存完成後可(kě)以調用(yòng)回調函數。
● SaveAnchorWithResult
通(tōng)過指定的(de)名稱或生成的(de)哈希值保存 AR Anchor 對(duì)象,保存完成後可(kě)以調用(yòng)回調函數。
● SaveAnchorResult 的(de)可(kě)能值包括:
○ PENDING: 錨點待保存。無法正常查看,請使用(yòng) ARAnchor.pending 進行檢查。
○ SAVED: 成功保存到本地存儲中。
○ FAILURE_RUNTIME_ERROR: 由于運行時(shí)錯誤,未能保存到本地存儲中。
○ FAILURE_STORE_NOT_LOADED: 由于 Spaces Anchor Store 加載失敗,未能保存到本地存儲中。
○ FAILURE_INSUFFICIENT_QUALITY: 由于環境地圖質量不足,未能保存到本地存儲中。
● DeleteSavedAnchor
通(tōng)過名稱從本地存儲中删除已保存的(de)錨點。
● LoadSavedAnchor
○ 從本地存儲中加載錨點,并嘗試在場(chǎng)景中定位該錨點。如果找到錨點,将實例化(huà)一個(gè) AR Anchor 對(duì)象。加載的(de)錨點将在 ARAnchorManager 的(de) anchorsChanged 事件中列爲已添加。保存的(de)錨點名稱可(kě)以通(tōng)過 GetSavedAnchorNames 方法獲取。保存完成後可(kě)以調用(yòng)回調函數。
● LoadAllSavedAnchors
從存儲中加載所有錨點,并嘗試在場(chǎng)景中定位它們。與 LoadSavedAnchor 方法類似,識别到的(de)錨點将實例化(huà)爲 AR Anchor 對(duì)象。
● GetSavedAnchorNames
返回所有已保存錨點的(de)名稱。
● GetSavedAnchorNameFromARAnchor
○ 如果跟蹤到的(de) AR Anchor 對(duì)象是之前保存的(de),方法将返回其名稱;否則返回空字符串。此方法可(kě)用(yòng)于檢查一個(gè)錨點是否爲已保存的(de)錨點。
在示例中保存、删除和(hé)加載錨點
通(tōng)過啓用(yòng)“将新錨點保存到本地存儲”選項,每當創建新的(de)錨點時(shí),它都會被保存到本地應用(yòng)存儲中。這(zhè)意味著(zhe),隻要場(chǎng)景中有 AR Anchor Manager,該錨點就可(kě)以像其他(tā)常規錨點一樣被重新創建和(hé)跟蹤。爲了(le)區(qū)分(fēn)常規錨點和(hé)已保存的(de)錨點,在錨點的(de)中心會生成一個(gè)額外的(de)立方體網格。如果立方體是紅色,表示該錨點未被跟蹤;如果是白色,則表示正在跟蹤。點擊“加載所有已保存的(de)錨點”将從本地存儲中加載所有錨點,并嘗試在場(chǎng)景中定位它們。點擊“清除存儲”将删除所有保存在本地存儲中的(de)錨點,但不會影(yǐng)響從存儲中加載的(de)現有錨點。