Table of Contents

添加 Mega 跟踪目標

本文介紹了如何添加 Mega 的跟踪目標以及如何在 Unity 編輯器中加載環境模型以輔助開發。

開始之前

附註

以下內容及工具僅適用於使用 EasyAR Mega 開發 Unity 應用的過程。

如果您在開發小程序,請參考 使用 Unity 編輯器創建並上傳標註(小程序開發)

如果您只希望查看 Mega 建圖結果,請參考 Mega 使用指南中的 預覽3D 實景網格

如果您需要模擬運行查看定位效果,但您並沒有一個可以使用的 Unity 應用工程,請參考 Mega 使用指南中的 模擬運行效果預覽

Mega 的跟踪目標

Mega 的跟踪目標是包含 BlockController 組件的空物體,稱為 block。在場景中,block 會被組織在一個包含 BlockRootController 組件的空物體下,這個物體的預設名稱為 MegaBlocksMegaBlocks 下所有的 block 物體代表了當前定位庫中的所有跟踪目標。

alt text

開發中經常需要使用 block 模型來輔助查看和擺放 3D 內容。這個模型可以使用工具加載到場景中,方便查看和參考。

alt text

模型位置是與 block 跟踪目標對齊的,可以直接在模型上擺放 3D 內容。

提示

模型存儲於工具節點下,僅存在於編輯器模式下,不會被打包進最終應用。

在編輯器中添加跟踪目標

使用這個方法需要配置 BlockHolder.BlockRootSourceExternal(預設) 或 Mixed

alt text

添加 Block Viewer for Unity Developer 工具

Hierarchy 視窗中 空白 處點擊右鍵,通過菜單 EasyAR Mega > Tool > Block Viewer for Unity Developer (Edit Mode) 可以添加 Unity 開發用的 Block Viewer 工具。

alt text

重要事項

使用 Unity 開發 Mega 應用時,必須使用 Block Viewer for Unity Developer 工具。EasyAR Mega > Tool 菜單下的其它工具不適合做 Unity 應用開發。

雖然 Annotation Tool 也有類似的功能,但這個工具的部分功能將在未來版本中被移除,因此不建議使用。

Annotation Tool 的標註功能(僅標註本身)即將遷移至 EasyAR 開發中心網頁,block mesh 加載和模型擺放不受影響。

工具添加成功後,場景層級中會多出一個 EasyAR.Mega.BlockViewer (Dev) 節點和一個 MegaBlocks 節點。

alt text

生成跟踪目標 —— block

選中 EasyAR.Mega.BlockViewer (Dev) 節點,在 Inspector 面板中填寫 EasyAR 帳號資訊並登入;

alt text

點擊 Mega Cloud Service 右側按鈕;

alt text

選擇需要使用的 Mega定位服務,點擊確定

alt text

在選擇服務之後,當前庫中的 block 列表會顯示在 MegaBlocks 節點下,並顯示在工具面板上。

alt text

提示

為什麼我的 MegaBlocks 下面是空的?

建議檢查 我的定位庫可以使用了嗎?

到這裡已經生成了跟踪目標 block,MegaBlocks 節點下每個 Block_ 開頭的子節點即代表一個 block 跟踪目標。

加載 block 模型

點擊加載選擇的Block:

alt text

加載完成後,Block 會顯示在 Scene 視窗中。

alt text

定位成功時自動添加跟踪目標

使用這個方法需要配置 BlockHolder.BlockRootSourceInternalMixed

在這兩個模式下,如果定位到一個新的 block 且 BlockHolder.BlockRoot 節點下沒有該 block,這個新的 block 會被自動添加到 BlockHolder.BlockRoot 節點下。如果 BlockHolder.BlockRoot 不存在會被自動創建。

提示

定位成功時自動添加跟踪目標時,無法加載 block 模型,僅能添加 block 跟踪目標。

在腳本中添加跟踪目標

使用這個方法需要配置 BlockHolder.BlockRootSourceInternalMixed,這時如果 BlockHolder.BlockRoot 不存在會被自動創建。或者也可以在 BlockHolder.BlockRootSourceExternal 時在編輯器中事先指定好 BlockHolder.BlockRoot 物體。

附註

如果 block 不在定位庫中,即使使用腳本添加到場景中,block 也無法被定位到。

可以使用 BlockHolder.Hold 方法添加一個新的 block 到 BlockHolder.BlockRoot 節點下。這個方法通常用在使用 ema 標註文件時,腳本讀取到標註資訊後添加 block。

比如,下面的代碼片段展示了如何使用標註文件中的資訊添加 block:

foreach (var item in ema.blocks)
{
    var info = new BlockController.BlockInfo { ID = item.id.ToString(), Timestamp = item.timestamp };
    if (!item.keepTransform && item.location.OnSome)
    {
        blockHolder.Hold(info, item.location.Value);
    }
    else
    {
        blockHolder.Hold(info, item.transform.ToUnity());
    }
}
提示

使用腳本在運行時添加跟踪目標時,無法加載 block 模型,僅能添加 block 跟踪目標。

後續步驟

相關主題