/// <summary>
 /// MonoBehaviour OnDestroy
 /// </summary>
 protected virtual void OnDestroy()
 {
     if (mapWorker)
     {
         mapWorker = null;
         UpdateMapInLocalizer();
     }
     if (MapInfo != null)
     {
         MapInfo = null;
     }
 }
        private void UpdateMapInLocalizer()
        {
            if (MapInfo == null)
            {
                return;
            }
            if ((SourceType == DataSource.MapBuilder && !string.IsNullOrEmpty(MapInfo.ID)) ||
                (SourceType != DataSource.MapBuilder && string.IsNullOrEmpty(MapInfo.ID)))
            {
                return;
            }
            if (loader && loader != mapWorker)
            {
                switch (SourceType)
                {
                case DataSource.MapBuilder:
                    loader.UnloadSparseSpatialMapBuild(this);
                    loader = null;
                    break;

                case DataSource.MapManager:
                    loader.UnloadSparseSpatialMap(this, (map, status, error) =>
                    {
                        if (MapUnload != null)
                        {
                            MapUnload(map, status, error);
                        }
                    });
                    loader = null;
                    break;

                default:
                    break;
                }
            }
            if (mapWorker && mapWorker != loader)
            {
                var worker = mapWorker;
                switch (SourceType)
                {
                case DataSource.MapBuilder:
                    mapWorker.LoadSparseSpatialMapBuild(this);
                    loader = mapWorker;
                    break;

                case DataSource.MapManager:
                    mapWorker.LoadSparseSpatialMap(this, (map, status, error) =>
                    {
                        if (worker == mapWorker && !status)
                        {
                            loader = null;
                        }
                        if (MapLoad != null)
                        {
                            MapLoad(map, status, error);
                        }
                    });
                    loader = mapWorker;
                    break;

                default:
                    break;
                }
            }
        }