protected override async UniTask PreSpawnEntities() { // Spawn buildings if (!IsInstanceMap()) { // Load buildings // Don't load buildings if it's instance map BuildingsResp resp = await DbServiceClient.ReadBuildingsAsync(new ReadBuildingsReq() { MapName = CurrentMapInfo.Id, }); HashSet <StorageId> storageIds = new HashSet <StorageId>(); List <BuildingSaveData> buildings = resp.List; BuildingEntity buildingEntity; foreach (BuildingSaveData building in buildings) { buildingEntity = CreateBuildingEntity(building, true); if (buildingEntity is StorageEntity) { storageIds.Add(new StorageId(StorageType.Building, (buildingEntity as StorageEntity).Id)); } } List <UniTask> tasks = new List <UniTask>(); // Load building storage foreach (StorageId storageId in storageIds) { tasks.Add(LoadStorageRoutine(storageId)); } // Wait until all building storage loaded await UniTask.WhenAll(tasks); } }