/// <summary> /// 读取本地资源列表,streaming asset目录里的 /// </summary> private IEnumerator ReadBuiltinResourceList() { string infoPath = Path.Combine(Application.streamingAssetsPath, RuntimeSetting.FileInfoPath); BuiltinResourceList = new XmlResourceList(); if (infoPath.Contains("://")) { using (WWW www = new WWW(infoPath)) { yield return(www); if (!string.IsNullOrEmpty(www.error)) { Debug.Log(www.error); yield break; } BuiltinResourceList.ReadFromXml(www.text); } } else if (File.Exists(infoPath)) { BuiltinResourceList.ReadFromXml(File.ReadAllText(infoPath)); //TODO:异常处理 } else { Debug.Log(infoPath + " NOT FOUND"); } }
/// <summary> /// 加载远程资源列表 /// </summary> /// <returns></returns> public static IEnumerator DownloadRemoteResourceList() { #if STANDALONE string infoPath = Path.Combine(Application.streamingAssetsPath, RuntimeSetting.FileInfoPath); RemoteResourceList = new XmlResourceList(); if (infoPath.Contains("://")) { using (WWW www = new WWW(infoPath)) { yield return(www); if (!string.IsNullOrEmpty(www.error)) { Debug.Log(www.error); yield break; } RemoteResourceList.ReadFromXml(www.text); } } else if (File.Exists(infoPath)) { RemoteResourceList.ReadFromXml(File.ReadAllText(infoPath)); //TODO:异常处理 } else { Debug.Log(infoPath + " NOT FOUND"); } #else Uri uri = new Uri(RuntimeSetting.RemoteResourceUri, RuntimeSetting.FileInfoPath); using (WWW www = new WWW(uri.AbsoluteUri)) { yield return(www); if (!string.IsNullOrEmpty(www.error)) { Debug.Log(www.error); yield break; } RemoteResourceList = new XmlResourceList(); RemoteResourceList.ReadFromXml(www.text); } #endif }
/// <summary> /// 下载资源 /// </summary> /// <returns></returns> private IEnumerator DownloadRemoteResource() { if (AssetLoader.RemoteResourceList.GetCount() <= 0) { yield break; } XmlResourceList.Item[] items = AssetLoader.RemoteResourceList.GetAllItems(); XmlResourceList localList = new XmlResourceList(); XmlResourceList saveList = new XmlResourceList(); string localFileInfoPath_ = Path.Combine(Application.persistentDataPath, RuntimeSetting.FileInfoPath); if (File.Exists(localFileInfoPath_)) { localList.ReadFromXml(File.ReadAllText(localFileInfoPath_)); Debug.Log(localFileInfoPath_ + " EXIST"); Debug.Log("Total:" + localList.GetCount()); } else { Debug.Log(localFileInfoPath_ + " NOT EXIST"); } ChildMaxNum = items.Length; ChildNowNum = 0; for (int i = 0; i < ChildMaxNum; i++) { XmlResourceList.Item item = items[i]; XmlResourceList.Item localItem = localList.GetItem(item.Path); XmlResourceList.Item builtinItem = AssetLoader.BuiltinResourceList.GetItem(item.Path); if (item.Deleted) { ChildNowNum++; continue; } if (builtinItem != null && item.Version <= builtinItem.Version) { ChildNowNum++; saveList.AddToItems(item); continue; } if (localItem != null && item.Version <= localItem.Version) { ChildNowNum++; saveList.AddToItems(item); continue; } if (item.Path.Contains("fileinfo.xml")) { continue; } string readPath = AssetLoader.GetResourceRemoteUrl(item.Path); string writePath = Path.Combine(Application.persistentDataPath, item.Path); yield return(StartCoroutine(DownloadToLocal(readPath, writePath))); if (!File.Exists(writePath)) { Debug.LogError("Download file failed:" + readPath); yield break; } ChildNowNum++; saveList.AddToItems(item); } Utility.CreateDirByFilePath(localFileInfoPath_); saveList.Save(localFileInfoPath_); Debug.Log("Write new resource list: " + localFileInfoPath_); }