private const int MaxTryNum = 3; // 最多重试次数 private void Update( ) { // 下载量充足,增加新的下载 if (_loadingQueue.Count < MaxWorkingCnt) { int cnt = MaxWorkingCnt - _waitingQueue.Count; for (int i = 0; i < cnt; i++) { if (_waitingQueue.Count <= 0) { break; } string url = _waitingQueue.Dequeue( ); _loadingQueue.Add(new LoadingAbInfo(url)); } } // 检查下载状态 for (var index = _loadingQueue.Count - 1; index >= 0; index--) { LoadingAbInfo info = _loadingQueue[index]; if (info.State == LoadStateType.Loding) { continue; } // 三次都没有下载下来 if (info.ErrorCount >= MaxTryNum) { GameLogger.GetInstance( ) .Output(string.Format("!!!!! AssetBundle CreateFromWWW failed: {0}\n\t ErrorCount >= {1}", info.Url, MaxTryNum)); _loadingQueue.RemoveAt(index); continue; } StartCoroutine(OnAssetLoadStart(info)); } // 检查request的完成情况 List <string> tmpKeys = new List <string>(_requests.Keys); foreach (var one in tmpKeys) { AsyncLoadRequest request = _requests[one]; if (request.CompletedCallback( )) { _requests.Remove(one); } } }
public void CreateDependsReques(string url, string mainUrl) { // 注册一个回调 AsyncLoadRequest request = _requests[mainUrl]; if (request == null) { throw new Exception("CreateDependsReques AsyncLoadRequest == null"); } RegisterLoadedCallBack(url, request.UrlLoadedCallBack); // 没有正在下载的相同url,排个队 if (!IsLoading(url)) { _waitingQueue.Enqueue(url); } }
private void CreateRequest(string url, AsyncLoadCallBack.CallBack onAsyncRequestCallBack, object context) { // ①:先创建一个回调 AsyncLoadCallBack callbackFun = new AsyncLoadCallBack(onAsyncRequestCallBack, context); // ③是否已有加载数据,已有,注册一个回调函数,等待返回 if (_requests.ContainsKey(url)) { _requests[url].Callbacks.Add(callbackFun); return; } // ②:没有加载相关数据,新建一个异步请求,注册一个回调函数 // url可能已存在于缓存,需要请求的是依赖项 AsyncLoadRequest request = new AsyncLoadRequest(url, AssetBundleMgr.GetInstance( ).GetAbDependencies(url)); request.Callbacks.Add(callbackFun); _requests.Add(url, request); AssetBundle ab = GetAb(url); if (ab == null) { RegisterLoadedCallBack(url, request.UrlLoadedCallBack); } else { // 主ab包已经加载了,需要加载的是依赖包 string depsUrl = request.GetUnLoadUrl( ); RegisterLoadedCallBack(depsUrl, request.UrlLoadedCallBack); url = depsUrl; } // ④:没有正在下载的相同url,排个队 if (!IsLoading(url)) { _waitingQueue.Enqueue(url); } }