private static void UpdateBundles() { int max = MAX_BUNDLES_PERFRAME; // 正在加载的bundle数量小于每帧可加载数量 if (_toloadBundles.Count > 0 && max > 0 && _loadingBundles.Count < max) { // 把能加载的bundle加进加载队列中 for (int i = 0; i < Math.Min(max - _loadingBundles.Count, _toloadBundles.Count); ++i) { BundleRequest item = _toloadBundles[i]; if (item.loadState == AssetLoadState.Init) { item.Load(); _loadingBundles.Add(item); _toloadBundles.RemoveAt(i); --i; } } } // 加载中bundleUpdate,加载完就移除 for (var i = 0; i < _loadingBundles.Count; i++) { var item = _loadingBundles[i]; if (item.Update()) { continue; } _loadingBundles.RemoveAt(i); --i; } // 加载完的bundle,并且没有引用,就加进无用bundle列表 foreach (var item in _bundles) { if (item.Value.isDone && item.Value.IsUnused()) { _unusedBundles.Add(item.Value); } } if (_unusedBundles.Count <= 0) { return; } // 清理无用bundle列表 for (int i = 0; i < _unusedBundles.Count; i++) { BundleRequest item = _unusedBundles[i]; if (item.isDone) { item.Unload(); _bundles.Remove(item.name); GameLog.Log("UnloadBundle: " + item.name); } } _unusedBundles.Clear(); }