/// <summary>
        /// 卸载所有资源
        /// </summary>
        public void UnloadAllAsset()
        {
            foreach (var v in AssetbundleMap)
            {
                UnloadAsset(v.Key);
            }

            AssetbundleMap.Clear();
        }
Example #2
0
        /// <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("路径不存在");
            }
        }
Example #5
0
        /// <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));
        }