private IEnumerator DoCheckRemoteVersion(Action <List <string> > downloadComplete, Action <int, int, float> downloadProgress, Func <string, bool> filter, bool NoDependeces, params string[] resources) { yield return(new WaitForEndOfFrame()); this.downloadComplete = downloadComplete; downloading = true; ResetDownloadStatus(); if (string.IsNullOrEmpty(UStaticFuncs.DownLoadConfigURL)) { Debug.Log("资源下载地址为空"); } else { Debug.Log("正在检查资源版本"); downloadingResources = resources.ToList(); if (!NoDependeces) { foreach (var r in resources) { var files = UAssetBundleDownloader.Instance.OnGetAssetBundleDependeces(r); foreach (var f in files) { if (downloadingResources.Contains(f)) { continue; } downloadingResources.Add(f); } } } var downloadedResources = new List <string>(); if (dFileRemoteVersions.Count == 0) { var url = UStaticFuncs.DownLoadConfigURL + "versions.txt?-" + ApiDateTime.Now.Ticks; if (UStaticFuncs.GetPlatformFolder(Application.platform) == UStaticFuncs.GetPlatformFolder(RuntimePlatform.WindowsPlayer)) { if (!url.Contains("://")) { url = "file://" + url; } } WWW www = new WWW(url); yield return(www); if (string.IsNullOrEmpty(www.error)) { var text = www.text; var atext = text.Split(new char[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries); foreach (var t in atext) { var name = ""; var av = t.Split('|'); if (av.Length < 3) { continue; } name = av[0]; if (name.StartsWith("/") || name.StartsWith("\\")) { name = name.Substring(1); } name = name.Replace("\\", "/"); var filecell = new RemoteFileCell(); filecell.version = av[1]; filecell.bytes = typeParser.Int64Parse(av[2]); if (dFileRemoteVersions.ContainsKey(name)) { dFileRemoteVersions[name] = filecell; } else { dFileRemoteVersions.Add(name, filecell); } } } else { Debug.Log("检查资源版本失败," + www.error); } } foreach (var rver in dFileRemoteVersions) { if (filter != null && filter(rver.Key)) { if (!downloadingResources.Contains(rver.Key)) { downloadingResources.Add(rver.Key); } if (!NoDependeces) { var files = OnGetAssetBundleDependeces(rver.Key); foreach (var f in files) { if (downloadingResources.Contains(f)) { continue; } downloadingResources.Add(f); } } } var remove = new List <string>(); foreach (var n in downloadingResources) { if (!dFileRemoteVersions.ContainsKey(n)) { remove.Add(n); } } foreach (var r in remove) { downloadingResources.Remove(r); } } foreach (var r in downloadingResources) { totalBytes += dFileRemoteVersions[r].bytes; } if (dFileRemoteVersions.Count != 0) { waitingForDownload = new List <string>(); waitingForDownload.AddRange(downloadingResources); if (downloadingResources.Count == 0) { OnDownloadComplete(waitingForDownload); } else { for (var i = 0; i < DownloadHandlerCount && i < downloadingResources.Count; i++) { StartToDownloadResources(downloadComplete, downloadProgress); } } } } }
private IEnumerator DoCheckRemoteVersion(Action <List <string> > downloadComplete, Action <int, int, float> downloadProgress, Func <string, bool> filter, bool NoDependeces, params string[] resources) { if (string.IsNullOrEmpty(UStaticFuncs.DownLoadConfigURL)) { Debug.Log("资源下载地址为空。"); } else { Debug.Log("正在检查资源版本"); var resourcesList = resources.ToList(); if (!NoDependeces) { foreach (var r in resources) { var files = UAssetBundleDownloader.Instance.OnGetAssetBundleDependeces(r); foreach (var f in files) { if (resourcesList.Contains(f)) { continue; } resourcesList.Add(f); } } } var downloadedResources = new List <string>(); if (dFileRemoteVersions.Count == 0) { var url = UStaticFuncs.DownLoadConfigURL + "versions.txt?" + ApiDateTime.Now.Ticks; if (UStaticFuncs.GetPlatformFolder(Application.platform) == UStaticFuncs.GetPlatformFolder(RuntimePlatform.WindowsPlayer)) { if (!url.Contains("://")) { url = "file://" + url; } } www = new WWW(url); yield return(www); if (string.IsNullOrEmpty(www.error)) { var text = www.text; var atext = text.Split(new char[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries); foreach (var t in atext) { var name = ""; var av = t.Split('|'); if (av.Length < 3) { Debug.LogError("remote version file check failed"); } name = av[0]; if (name.StartsWith("/") || name.StartsWith("\\")) { name = name.Substring(1); } name = name.Replace("\\", "/"); var filecell = new RemoteFileCell(); filecell.version = av[1]; filecell.bytes = typeParser.Int64Parse(av[2]); if (dFileRemoteVersions.ContainsKey(name)) { dFileRemoteVersions[name] = filecell; } else { dFileRemoteVersions.Add(name, filecell); } } } else { Debug.Log("检查资源版本失败," + www.error); } } foreach (var rver in dFileRemoteVersions) { if (filter != null && filter(rver.Key)) { if (!resourcesList.Contains(rver.Key)) { resourcesList.Add(rver.Key); } if (!NoDependeces) { var files = OnGetAssetBundleDependeces(rver.Key); foreach (var f in files) { if (resourcesList.Contains(f)) { continue; } resourcesList.Add(f); } } } var remove = new List <string>(); foreach (var n in resourcesList) { if (dAssetBundles.ContainsKey(n) || !dFileRemoteVersions.ContainsKey(n)) { remove.Add(n); } } foreach (var r in remove) { resourcesList.Remove(r); } } totalBytes = 0; foreach (var r in resourcesList) { totalBytes += dFileRemoteVersions[r].bytes; } if (dFileRemoteVersions.Count != 0) { if (resourcesList.Count == 0) { downloadComplete?.Invoke(resourcesList); } else { StartToDownloadResources(downloadComplete, downloadProgress, downloadedResources, resourcesList); #if UNITY_IOS || UNITY_EDITOR StartCoroutine(DelayUpdateProgress(downloadProgress, downloadedResources, resourcesList)); #endif } } } }