/// <summary> /// 下载包资源 /// </summary> IEnumerator StartDownloadPack() { if (ErrorCode != emErrorCode.None) { yield break; } UpdateCompleteValue(0f, 0f); if (packages_name_ == null) { Error(emErrorCode.InvalidPackageName); yield break; } //收集所有需要下载的AssetBundle List <string> ab_list = new List <string>(); for (int i = 0; i < packages_name_.Count; ++i) { string pack_name = packages_name_[i]; List <string> list = AssetBundleManager.Instance.FindAllAssetBundleFilesNameByPackage(pack_name); ab_list.AddRange(list); } if (ab_list == null) { Error(emErrorCode.NotFindAssetBundle); yield break; } //过滤已下载的资源 ab_list.RemoveAll((assetbundle_name) => { return(File.Exists(Common.GetFileFullName(assetbundle_name))); }); if (ab_list.Count == 0) { yield break; } //载入资源信息描述文件 ResourcesManifest resources_manifest = AssetBundleManager.Instance.ResourcesManifest; //开始下载 ab_download_ = new AssetBundleDownloader(current_url_); ab_download_.Start(Common.PATH, ab_list, resources_manifest); while (!ab_download_.IsDone) { UpdateCompleteValue(ab_download_.CompletedSize, ab_download_.TotalSize); yield return(null); } if (ab_download_.IsFailed) { Error(emErrorCode.DownloadAssetBundleFailed); yield break; } ab_download_ = null; yield return(null); }
/// <summary> /// 中止下载 /// </summary> public void AbortDownload() { StopAllCoroutines(); if (verifier_ != null) { verifier_.Abort(); verifier_ = null; } if (ab_download_ != null) { ab_download_.Abort(); ab_download_ = null; } UpdateState(emState.Abort); Done(); }
/// <summary> /// /// </summary> public void AbortUpdate() { StopAllCoroutines(); if (verifier_ != null) { verifier_.Abort(); verifier_ = null; } if (file_download_ != null) { file_download_.Abort(); file_download_ = null; } if (ab_download_ != null) { ab_download_.Abort(); ab_download_ = null; } SaveDownloadCacheData(); UpdateState(emState.Abort); Done(); }
/// <summary> /// 更新AssetBundle /// </summary> IEnumerator StartUpdateAssetBundle() { if (ErrorCode != emErrorCode.None) { yield break; } UpdateCompleteValue(0f, 0f); //载入新的ResourcesManifest ResourcesManifest old_resource_manifest = AssetBundleManager.Instance.ResourcesManifest; string file = Common.GetCacheFileFullName(Common.RESOURCES_MANIFEST_FILE_NAME); ResourcesManifest new_resources_manifest = Common.LoadResourcesManifestByPath(file); if (new_resources_manifest == null) { Error(emErrorCode.LoadNewResourcesManiFestFailed , "Can't load new verion ResourcesManifest!"); yield break; } //载入MainManifest AssetBundleManifest manifest = AssetBundleManager.Instance.MainManifest; file = Common.GetCacheFileFullName(Common.MAIN_MANIFEST_FILE_NAME); AssetBundleManifest new_manifest = Common.LoadMainManifestByPath(file); if (new_manifest == null) { Error(emErrorCode.LoadNewMainManifestFailed , "Can't find new version MainManifest!"); yield break; } //获取需下载的资源列表与删除的资源的列表 List <string> download_files = new List <string>(); List <string> delete_files = new List <string>(); CompareAssetBundleDifference(ref download_files, ref delete_files , manifest, new_manifest , old_resource_manifest, new_resources_manifest); //删除已废弃的文件 if (delete_files.Count > 0) { for (int i = 0; i < delete_files.Count; ++i) { string full_name = Common.GetFileFullName(delete_files[i]); if (File.Exists(full_name)) { File.Delete(full_name); yield return(0); } } } //更新所有需下载的资源 ab_download_ = new AssetBundleDownloader(current_url_); ab_download_.Start(Common.PATH, download_files, new_resources_manifest); while (!ab_download_.IsDone) { UpdateCompleteValue(ab_download_.CompletedSize, ab_download_.TotalSize); yield return(0); } if (ab_download_.IsFailed) { Error(emErrorCode.DownloadAssetBundleFailed); yield break; } }