/// <summary> /// 下载.manifest文件 /// </summary> /// <param name="fileList"></param> /// <param name="list"></param> /// <returns></returns> private IEnumerator DownAllManifestFile(string url, List <string> fileList, Action <Dictionary <string, AssetBundleManifestData> > action) { Dictionary <string, AssetBundleManifestData> list = new Dictionary <string, AssetBundleManifestData>(); for (int i = 0; i < fileList.Count; i++) { string fileName = fileList[i]; UnityWebRequest request = UnityWebRequest.Get(url + fileName + Config.suffix_manifest); yield return(request.SendWebRequest()); if (request.isHttpError || request.isNetworkError) { Debug.LogError(request.downloadHandler.text); list.Add(fileName, new AssetBundleManifestData(fileName)); } else { AssetBundleManifestData abmd = new AssetBundleManifestData(request.downloadHandler.text, fileName); list.Add(fileName, abmd); } request.Dispose(); } if (action != null) { action.Invoke(list); } }
/// <summary> /// 下载加载Main manifest文件 /// </summary> /// <param name="url"></param> /// <param name="abmd"></param> /// <returns></returns> private IEnumerator DownMainManifestFile(string url, string fileName, Action <AssetBundleManifestData> data) { Debug.Log(url); UnityWebRequest request = UnityWebRequest.Get(url); yield return(request.SendWebRequest()); AssetBundleManifestData abmd; if (request.isHttpError || request.isNetworkError) { Debug.LogError(request.downloadHandler.text); abmd = new AssetBundleManifestData(fileName); } else { abmd = new AssetBundleManifestData(request.downloadHandler.text, fileName); } if (data != null) { data.Invoke(abmd); } request.Dispose(); }
private IEnumerator LoadActualAsset(AssetBundleManifestData manifestData, Action <string, AssetBundle> callback) { uint crc = 0; string[] lines; lines = manifestData.manifestText.Split('\n'); if (lines[1].Contains("CRC:") && lines[5].Contains("Hash:")) { uint.TryParse(lines[1].Substring(5, lines[1].Length - 5), out crc); Hash128 hash = Hash128.Parse(lines[5].Split(':')[1].Trim()); UnityWebRequest request; request = UnityWebRequestAssetBundle.GetAssetBundle(manifestData.assetBundleUrl, hash, crc); yield return(request.SendWebRequest()); if (request.isHttpError || request.isNetworkError) { callback?.Invoke(request.error, null); } // This one is crucial for debugging. Code 200 means downloaded from web and Code 0 means loaded from cache. Debug.Log(request.responseCode); // Download the actual content bundle AssetBundle bundle = DownloadHandlerAssetBundle.GetContent(request); // Execute action with downloaded asset callback?.Invoke("none", bundle); // unload the bundle bundle.Unload(false); } }
public static void UnloadAssetBundle( AssetBundleManifestData data, bool isUnloadForceRefCount, bool unloadAllLoadedObjects = false) { AssetBundleManager.UnloadAssetBundle(data.bundle, isUnloadForceRefCount, data.manifest, unloadAllLoadedObjects); }
public void AddLoadAssetBundle(string assetBundleName, string manifestName) { if (manifestName.IsNullOrEmpty()) { manifestName = "abdata"; } AssetBundleManifestData bundleManifestData = new AssetBundleManifestData(); bundleManifestData.bundle = assetBundleName; bundleManifestData.manifest = manifestName; this.lstLoadAssetBundleInfo.Add((AssetBundleData)bundleManifestData); }
public void LoadAssetBundle(AssetBundleContainer assetBundle, Action <string, AssetBundle> callback) { MainAPI.Instance.SendRequst(MainAPI.HTTPMethod.GET, assetBundle.manifest, "", (res, err) => { AssetBundleManifestData manifestData = new AssetBundleManifestData { manifestText = res, assetBundleUrl = assetBundle.asset }; StartCoroutine(LoadActualAsset(manifestData, callback)); }); }
protected T Load <T>( string assetBundleName, string assetName, bool isClone = false, string manifestAssetBundleName = null) where T : Object { T obj1 = new AssetBundleManifestData(assetBundleName, assetName, manifestAssetBundleName).GetAsset <T>(); if (Object.op_Inequality((Object)(object)obj1, (Object)null) && isClone) { T obj2 = Object.Instantiate <T>(obj1); obj2.set_name(obj1.get_name()); obj1 = obj2; } return(obj1); }
public static AssetBundleManifestData ReadManifestFile(string pathName) { try { if (File.Exists(pathName)) { string v = File.ReadAllText(pathName); AssetBundleManifestData manifestData = new AssetBundleManifestData(v); return(manifestData); } } catch (Exception e) { Debug.LogError(e.ToString()); throw; } return(null); }
/// <summary> /// 下载保存ab文件 /// </summary> /// <param name="url"></param> /// <param name="downFileList"></param> /// <returns></returns> private IEnumerator DownUpdataFile(string url, string localPath, List <AssetBundleManifestData> downFileList) { for (int i = 0; i < downFileList.Count; i++) { AssetBundleManifestData data = downFileList[i]; UnityWebRequest request = UnityWebRequest.Get(url + data.fileName); yield return(request.SendWebRequest()); if (request.isHttpError || request.isNetworkError) { Debug.LogError(request.downloadHandler.text); Debug.LogError("下载AB文件时报错:" + data.fileName); } else { AssetBunildFileIO.SaveAssetBuildFile(localPath, data.fileName, request.downloadHandler.data); AssetBunildFileIO.SaveAssetBuildFile(localPath, data.manifestName, data.ToString()); } request.Dispose(); } }
private IEnumerator DownAB(string url, string path) { UnityWebRequest request = UnityWebRequest.Get(url); yield return(request.SendWebRequest()); if (request.isHttpError || request.isNetworkError) { Debug.Log(request.downloadHandler.text); } else { if (!File.Exists(path)) { Directory.CreateDirectory(path); } Debug.Log(request.downloadHandler.text); File.WriteAllBytes(path + "/AAA", request.downloadHandler.data); string str = File.ReadAllText(path + "/AAA"); AssetBundleManifestData abmd = new AssetBundleManifestData(str); } }
public static AssetBundleLoadOperation LoadLevelAsync( AssetBundleManifestData data, bool isAdditive) { return(AssetBundleManager.LoadLevelAsync(data.bundle, data.asset, isAdditive, data.manifest)); }
public static AudioSource Get(int voiceNo, AssetBundleManifestData data) { return(!Singleton <Manager.Voice> .IsInstance() ? (AudioSource)null : Singleton <Manager.Voice> .Instance.CreateCache(voiceNo, data)); }
public AudioSource CreateCache(Manager.Sound.Type type, AssetBundleManifestData data) { return(this.CreateCache(type, data.bundle, data.asset, data.manifest)); }
public IEnumerator Init() { Dictionary <string, AssetBundleManifestData> webList = null; Dictionary <string, AssetBundleManifestData> localList = null; AssetBundleManifestData webMainManifest = null; AssetBundleManifestData localMainManifest = null; Config.Init(target, url); //获取本地和服务器的MainManifest清单 yield return(StartCoroutine(DownMainManifestFile(Config.WebFileMainManifest(), Config.MainManifestFileName(), (d) => { webMainManifest = d; }))); yield return(StartCoroutine(DownMainManifestFile(Config.LocalFileMainManifestUnityWebRequest(), Config.MainManifestFileName(), (d) => { localMainManifest = d; }))); //网上无MainManifest清单则退出下载程序 if (webMainManifest.isNO) { Debug.LogError("网上无AB包!!!"); yield break; } //本地无MainManifest清单则创建 if (!localMainManifest.isNO) { if (webMainManifest.CRC == localMainManifest.CRC) { Debug.Log("本地为最新AB包,无需下载"); yield break; } } //根据主MainManifest文件获取其他manifest清单 yield return(StartCoroutine(DownAllManifestFile(Config.WebPath(), webMainManifest.abList.Keys.ToList(), (d) => { webList = d; }))); yield return (StartCoroutine(DownAllManifestFile(Config.LocalFileManifestUnityWebRequest(), localMainManifest.abList.Keys.ToList(), (d) => { localList = d; }))); ///检验获取下载项 //获取需要下载的列表 List <AssetBundleManifestData> downList = new List <AssetBundleManifestData>(); List <string> keys = webList.Keys.ToList(); for (int i = 0; i < keys.Count; i++) { string key = keys[i]; if (webList[key].isNO) { Debug.LogError("服务器上文件出现问题:" + key); continue; } if (localList.ContainsKey(key)) { if (webList[key].CRC != localList[key].CRC) { downList.Add(webList[key]); } localList.Remove(key); } else { downList.Add(webList[key]); } } //根据下载清单 下载并保存清单文件与ab文件 yield return(StartCoroutine(DownUpdataFile(Config.WebPath(), Config.LocalPath(), downList))); //下载文件 //获取且删除本地无用文件 List <AssetBundleManifestData> deleteList = localList.Values.ToList(); for (int i = 0; i < deleteList.Count; i++) { if (!deleteList[i].isNO) { AssetBunildFileIO.DeleteABManifest(Config.LocalPath(), deleteList[i].fileName); } } //覆盖本地主清单文件,表示下载完成 AssetBunildFileIO.SaveAssetBuildFile(Config.LocalPath(), Config.MainManifestFileName(), webMainManifest.ToString()); Debug.Log("下载完成"); }
public static AssetBundleLoadAssetOperation LoadAsset(AssetBundleManifestData data, Type type) { return(LoadAsset(data.bundle, data.asset, type, data.manifest)); }
public AudioSource CreateCache(int voiceNo, AssetBundleManifestData data) { return(this.CreateCache(voiceNo, data.bundle, data.asset, data.manifest)); }
public static AudioSource Get(Manager.Sound.Type type, AssetBundleManifestData data) { return(!Singleton <Manager.Sound> .IsInstance() ? (AudioSource)null : Singleton <Manager.Sound> .Instance.CreateCache(type, data)); }
public static AssetBundleLoadAssetOperation LoadAllAssetAsync( AssetBundleManifestData data, System.Type type) { return(AssetBundleManager.LoadAllAssetAsync(data.bundle, type, data.manifest)); }