void Update() { if (!ConfigLoaded) { return; } _finishList.Clear(); _failedsList.Clear(); //处理正在处理的request,如果已经OK,则切换到newFinish队列 //如果失败,再切换到newFail中 foreach (BundleRequest request in _processingRequest.Values) { if (!request.IsDone) { continue; } if (request.CreateRequest == null) { if (request.triedTimes - 1 < BmConfiger.DownloadRetryTime) { //use asset bundle request.CreateAssetBundle(); } else { _failedsList.Add(request.Url); Debug.LogError("Download " + request.Url + " failed for " + request.triedTimes + " times."); } } else if (request.CreateRequest.isDone) { _finishList.Add(request.Url); } } //将newFinish中的移动到successd队列之中 foreach (string finishedUrl in _finishList) { BundleRequest finishRequest = _processingRequest[finishedUrl]; _succeedRequest.Add(finishedUrl, finishRequest); _processingRequest.Remove(finishedUrl); finishRequest.LoadComplete(); } // 将失败的request加入到失败队列中 foreach (string finishedUrl in _failedsList) { if (!_failedRequest.ContainsKey(finishedUrl)) { _failedRequest.Add(finishedUrl, _processingRequest[finishedUrl]); } _processingRequest.Remove(finishedUrl); } // Start download new bundles int waitingIndex = 0; //处理等待队列,等待队列之中,有dependRequest,也有真正需要使用的depend while (_processingRequest.Count < BmConfiger.DownloadThreadsCount && waitingIndex < _waitingRequests.Count) { BundleRequest curRequest = _waitingRequests[waitingIndex++]; bool canStartDownload = curRequest.bundleData == null || isBundleDependenciesReady(curRequest.bundleData.name); if (canStartDownload) { _waitingRequests.Remove(curRequest); curRequest.CreateAssetBundle(); _processingRequest.Add(curRequest.Url, curRequest); } } }