/// <summary> /// 卸载所有资源 /// </summary> public void UnloadAllAsset() { foreach (var v in AssetbundleMap) { UnloadAsset(v.Key); } AssetbundleMap.Clear(); }
/// <summary> /// 加载资源 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="abName"></param> /// <param name="objName"></param> /// <returns></returns> public T LoadResFormAssetBundle <T>(string abName, string objName) where T : UnityEngine.Object { T o = default(T); if (AssetbundleMap.ContainsKey(abName)) { o = AssetbundleMap[abName].assetBundle.LoadAsset <T>(objName); } return(o); }
/// <summary> /// 加入ab包 /// </summary> /// <param name="name"></param> /// <param name="ab"></param> private void UseAssetBunle(string name, AssetBundle ab) { name = Path.GetFileName(name); if (AssetbundleMap.ContainsKey(name) == false) { AssetBundleReference abr = new AssetBundleReference() { assetBundle = ab }; AssetbundleMap[name] = abr; } AssetbundleMap[name].Use(); }
/// <summary> /// 卸载 /// </summary> /// <param name="name"></param> public void UnloadAsset(string name, bool isUnloadIsUsing = false) { var path = GetExistPath(name); if (path != null) { var res = manifest.Manifest.GetDirectDependencies(path); //创建一个队列 Queue <string> resQue = new Queue <string>(); foreach (var r in res) { if (AssetbundleMap.ContainsKey(r)) { resQue.Enqueue(r); } } resQue.Enqueue(path); foreach (var r in resQue) { if (AssetbundleMap.ContainsKey(r)) { if (isUnloadIsUsing) { AssetbundleMap[r].assetBundle.Unload(true); AssetbundleMap.Remove(r); } else { AssetbundleMap[r].Unuse(); } } } //移除无用的assetbundle var keys = new List <string>(AssetbundleMap.Keys); foreach (var k in keys) { if (AssetbundleMap[k].referenceCount <= 0) { AssetbundleMap.Remove(k); } } } else { BDebug.Log("路径不存在"); } }
/// <summary> /// 加载ab /// </summary> /// <param name="path"></param> /// <param name="sucessCallback"></param> public void LoadAssetBundleAsync(string path, Action <bool> sucessCallback) { path = Path.Combine(LocalHotUpdateResPath, path); path = "file:///" + path; path = path.Replace("\\", "/"); if (manifest.Manifest == null) { Debug.LogError("请先加载依赖文件!"); return; } var res = manifest.Manifest.GetDirectDependencies(Path.GetFileName(path)); //创建一个队列 Queue <string> resQue = new Queue <string>(); foreach (var r in res) { string _path = Path.GetDirectoryName(path) + "/" + Path.GetFileName(r); _path = _path.Replace("\\", "/"); var key = Path.GetFileName(_path); if (AssetbundleMap.ContainsKey(key) == false) { resQue.Enqueue(_path); } else { AssetbundleMap[key].Use(); } } if (AssetbundleMap.ContainsKey(Path.GetFileName(path)) == false) { resQue.Enqueue(path); } //开始加载队列 IEnumeratorTool.StartCoroutine(IELoadAssetBundles(resQue, sucessCallback)); }