EasyAR4的稀疏空間地圖支持同時加載多個稀疏空間地圖並使用。
多個稀疏空間地圖使用時候結構其實就是在場景中有多個SparseSpatialMap遊戲對象,每個遊戲對象對於一個具體的稀疏空間地圖。
從代碼上也不復雜,設置每個SparseSpatialMap的ID,名稱,事情和其他設置。然後,統一用SparseSpatialMapWorkerFrameFilter的.Localizer.startLocalization()方法進行本地化即可。
//獲取地圖信息,list是地圖信息字符串列表
var list = game.LoadMapInfos();
mapStatus = new string[list.Count];
for (int i = 0; i < list.Count; i++)
{
var info = list[i].Split(',');
var map = Instantiate(prefab);//生成稀疏空間地圖
map.SourceType = SparseSpatialMapController.DataSource.MapManager;
map.MapManagerSource.ID = info[0];//設置地圖ID
map.MapManagerSource.Name = info[1];//設置地圖名稱
map.MapWorker = mapWorker;
//地圖加載事件
map.MapLoad += (mapInfo, isSuccess, error) =>
{
if (isSuccess)
{
text.text = mapInfo.Name + "-->" + "map load success." + Environment.NewLine + text.text;
}
else
{
text.text = mapInfo.Name + "-->" + "map load fail." + Environment.NewLine + text.text;
}
};
//定位成果事件
map.MapLocalized += () =>
{
text.text = map.MapInfo.Name+"-->"+"Localized."+Environment.NewLine+text.text;
};
//停止定位事件
map.MapStopLocalize += () =>
{
text.text = map.MapInfo.Name+"-->"+"Stopped."+Environment.NewLine+text.text;
};
}
//開始本地化地圖
mapWorker.Localizer.startLocalization();
使用效果,可以同時加載多個稀疏空間地圖,但是,同一時間,只有一個地圖可以定位(MapLocalized)。
加載的時候,所有地圖的MapLoad事件都馬上觸發,但是,只有一個地圖的MapLocalized事件能被觸發。一旦其他地圖觸發MapLocalized事件,之前地圖的MapStopLocalize必定被觸發。