/// <summary> /// 开始加载资源。 /// </summary> /// <param name="loadList"></param> /// <param name="loaded"></param> /// <returns></returns> private IEnumerator StartLoadAsset(LoadListInfo loadList, System.Action <AssetBundleInfo> loaded) { while (true) { if (loadList.Download != null) { loadList.Download.Dispose(); } string path = loadList.Next; LoggerHelper.Debug("path" + path); var key = Utils.GetFileName(path); LoggerHelper.Debug("key" + key); var info = m_allRecources[path]; if (info.Asset == null) //再次验证资源是否已加载 { var temp = string.Concat(SystemConfig.ASSET_FILE_HEAD, path, SystemConfig.ASSET_FILE_EXTENSION); //拼资源路径 temp = temp.Replace("\\", "/"); LoggerHelper.Debug(temp); loadList.Download = new WWW(temp); yield return(loadList.Download);//异步加载资源 //加载完成后缓存起资源引用 info.Asset = loadList.Download.assetBundle; } //info.ReferenceCount = 1; //LoggerHelper.Debug(key + loadList.Index); if (!loadList.HasNext)//加载完成后回调加载完成事件 { var assetInfo = m_assetBundleDic[loadList.Root]; try { if (loaded != null) { loaded(assetInfo); } } catch (System.Exception ex) { LoggerHelper.Except(ex); } ContinueLoad(); yield break; } } }
/// <summary> /// 加载资源 /// </summary> /// <param name="prefab"></param> /// <param name="loaded"></param> private void LoadAssetBundleInfo(string prefab, System.Action <AssetBundleInfo> loaded) { AssetBundleInfo assetBundleInfo; var flag = m_assetBundleDic.TryGetValue(prefab, out assetBundleInfo); if (flag) { if (assetBundleInfo.Asset != null) {//资源已加载,直接回调 //LoggerHelper.Debug("resource loaded: " + assetBundleInfo.Path); loaded(assetBundleInfo); } else { LoadListInfo loadList = new LoadListInfo(); loadList.Root = prefab; //LoggerHelper.Debug(prefab); loadList.LoadList = new List <string>(); loadList.LoadList.AddRange(GetAllFile(assetBundleInfo));//获取加载资源列表 //LoggerHelper.Debug(loadList.LoadList.Count); LoggerHelper.Debug("FileCount: " + loadList.LoadList.Count); if (m_isLoading) { //LoggerHelper.Debug("m_resourceLoadQueue Enqueue: " + assetBundleInfo.Path + m_resourceLoadQueue.Count); lock (m_resourceLoadQueueLocker) m_resourceLoadQueue.Enqueue(() => { StartCoroutine(StartLoadAsset(loadList, loaded)); }); } else { m_isLoading = true; StartCoroutine(StartLoadAsset(loadList, loaded)); } } } else { LoggerHelper.Warning(prefab + " does not exist."); } }
/// <summary> /// 开始加载资源。 /// </summary> /// <param name="loadList"></param> /// <param name="loaded"></param> /// <returns></returns> private IEnumerator StartLoadAsset(LoadListInfo loadList, System.Action<AssetBundleInfo> loaded) { while (true) { if (loadList.Download != null) loadList.Download.Dispose(); string path = loadList.Next; LoggerHelper.Debug("path" + path); var key = Utils.GetFileName(path); LoggerHelper.Debug("key" + key); var info = m_allRecources[path]; if (info.Asset == null)//再次验证资源是否已加载 { var temp = string.Concat(SystemConfig.ASSET_FILE_HEAD, path, SystemConfig.ASSET_FILE_EXTENSION);//拼资源路径 temp = temp.Replace("\\", "/"); LoggerHelper.Debug(temp); loadList.Download = new WWW(temp); yield return loadList.Download;//异步加载资源 //加载完成后缓存起资源引用 info.Asset = loadList.Download.assetBundle; } //info.ReferenceCount = 1; //LoggerHelper.Debug(key + loadList.Index); if (!loadList.HasNext)//加载完成后回调加载完成事件 { var assetInfo = m_assetBundleDic[loadList.Root]; try { if (loaded != null) loaded(assetInfo); } catch (System.Exception ex) { LoggerHelper.Except(ex); } ContinueLoad(); yield break; } } }
/// <summary> /// 加载资源 /// </summary> /// <param name="prefab"></param> /// <param name="loaded"></param> private void LoadAssetBundleInfo(string prefab, System.Action<AssetBundleInfo> loaded) { AssetBundleInfo assetBundleInfo; var flag = m_assetBundleDic.TryGetValue(prefab, out assetBundleInfo); if (flag) { if (assetBundleInfo.Asset != null) {//资源已加载,直接回调 //LoggerHelper.Debug("resource loaded: " + assetBundleInfo.Path); loaded(assetBundleInfo); } else { LoadListInfo loadList = new LoadListInfo(); loadList.Root = prefab; //LoggerHelper.Debug(prefab); loadList.LoadList = new List<string>(); loadList.LoadList.AddRange(GetAllFile(assetBundleInfo));//获取加载资源列表 //LoggerHelper.Debug(loadList.LoadList.Count); LoggerHelper.Debug("FileCount: " + loadList.LoadList.Count); if (m_isLoading) { //LoggerHelper.Debug("m_resourceLoadQueue Enqueue: " + assetBundleInfo.Path + m_resourceLoadQueue.Count); lock (m_resourceLoadQueueLocker) m_resourceLoadQueue.Enqueue(() => { StartCoroutine(StartLoadAsset(loadList, loaded)); }); } else { m_isLoading = true; StartCoroutine(StartLoadAsset(loadList, loaded)); } } } else { LoggerHelper.Warning(prefab + " does not exist."); } }