EasyAR4.0在去年底推出,新增了運動跟蹤,稀疏雲地圖等功能。
註冊,基本設置
EasyAR使用需要先註冊用戶,平面圖像跟蹤,物體跟蹤,表面跟蹤的功能只需要添加“Sense License Key”即可。如果需要使用稀疏雲地圖,則還需要添加“API KEY”
Sense License Key是和應用的Package Name/Bundle ID綁定的。
在導入EasyAR SDK以後,點擊菜單【EasyAR--Change License Key】或者目錄【EasyAR/Resources/EasyAR】下的【Settings】文件,即可輸入key。
總體結構
EasyAR官方把很多東西做成了預製件,多數情況下直接使用預製件即可。
【EasyAR】和【RenderCamera】是必須的內容,根據類型,搭配【VideoCameraDevice】和【VIOCameraDevice】。
【Focus Mode】官方說明
需要將Camera設置爲單色黑色背景,不能使用天空盒
平面圖像跟蹤
平面圖像跟蹤中,每個被跟蹤的圖像對應一個【ImageTarget】,【ImageTarget】需要指定【ImagetTracker】。同時顯示的數量由【Simultaneous Target Number】決定。target 和 tracker都可以是多個。
程序控制方面,【ImageTargetController】有對應事件,官方例子【ImageTracking_Targets】有參考。
private void AddTargetControllerEvents(ImageTargetController controller)
{
if (!controller)
{
return;
}
controller.TargetFound += () =>
{
Debug.LogFormat("Found target {{id = {0}, name = {1}}}", controller.Target.runtimeID(), controller.Target.name());
};
controller.TargetLost += () =>
{
Debug.LogFormat("Lost target {{id = {0}, name = {1}}}", controller.Target.runtimeID(), controller.Target.name());
};
controller.TargetLoad += (Target target, bool status) =>
{
imageTargetControllers[controller] = status ? true : imageTargetControllers[controller];
Debug.LogFormat("Load target {{id = {0}, name = {1}, size = {2}}} into {3} => {4}", target.runtimeID(), target.name(), controller.Size, controller.Tracker.name, status);
};
controller.TargetUnload += (Target target, bool status) =>
{
imageTargetControllers[controller] = status ? false : imageTargetControllers[controller];
Debug.LogFormat("Unload target {{id = {0}, name = {1}}} => {2}", target.runtimeID(), target.name(), status);
};
}
3D物體跟蹤
3D物體跟蹤和平面圖像跟蹤基本一樣,區別只是跟蹤時候的文件設置不一樣。程序處理時候事件是在【ObjectTargetController】下。
表面跟蹤
表面跟蹤是在設備不支持運動跟蹤情況下的退而求其次的選擇,不建議使用。
啓動後,【WorldRoot】遊戲對象會在當前設備位置固定下來,攝像頭參照移動。
運動跟蹤
運動跟蹤對設備有要求,具體看:Motion Tracking支持的設備
運動跟蹤是稀疏雲地圖和稠密雲地圖的基礎。
運動跟蹤也是,啓動以後,【WorldRoot】會在啓動位置固定,攝像頭根據移動變化。
稀疏雲地圖
稀疏雲地圖首先需要運動跟蹤。
用MapWorker來控制Map。
【Locailzation Mode】官方說明,官方例子中,創建地圖用UntilSuccess,加載地圖用的是KeepUpdate
【Source Type】爲【Map Builder】時是創建地圖。【Map Manager】時是加載地圖。
官方創建地圖和加載地圖的方法都在例子的【MapSession.cs】中。
保存方法是
MapWorker.BuilderMapController.Host(name, preview);
其中,preview是縮略圖,可以爲空。name也可以拾空字符串。通過MapHost事件返回結果。
MapWorker.BuilderMapController.MapHost += (map, isSuccessful, error) =>
{
...
};
try
{
MapWorker.BuilderMapController.Host(name, preview);
}
catch (Exception e)
{
...
}
地圖加載方式事件稍微多點,設置了map的ID和名稱以後,設置MapLoad事件獲取結果,MapLocalized和MapStopLocalize事件主要是用來獲取狀態。
controller.MapManagerSource = meta.Map;
...
controller.MapLoad += (map, status, error) =>
{
...
};
controller.MapLocalized += () =>
{
...
};
controller.MapStopLocalize += () =>
{
...
};
MapWorker.Localizer.startLocalization();
EasyAR4.0簡單的使用說明