/// <summary>
        /// ab包计数器
        /// </summary>
        /// <param name="hash"></param>
        /// <param name="ab"></param>
        private void AddAssetBundle(string hash, AssetBundle ab)
        {
            //
            if (!assetbundleMap.ContainsKey(hash))
            {
                AssetBundleWapper abr = new AssetBundleWapper()
                {
                    assetBundle = ab
                };
                assetbundleMap[hash] = abr;
            }

            assetbundleMap[hash].Use();
        }
        /// <summary>
        /// 同步加载
        /// </summary>
        /// <param name="fullPath"></param>
        /// <typeparam name="T"></typeparam>
        /// <returns></returns>
        public T Load <T>(string path) where T : UnityEngine.Object
        {
            //BDebug.Log("加载:" + path);
            //1.依赖路径
            var dependAssets = config.Manifest.GetDirectDependenciesByName(path);

            if (dependAssets == null)
            {
                return(null);
            }

            //同步加载
            foreach (var res in dependAssets)
            {
                //1.判断是否有多个ab在1个Package中
                var item     = config.Manifest.GetManifestItemByHash(res);
                var realPath = res;
                //如果有package
                if (item != null && !string.IsNullOrEmpty(item.Package))
                {
                    realPath = item.Package;
                }

                if (!assetbundleMap.ContainsKey(realPath))
                {
                    var p  = FindAsset(realPath);
                    var ab = AssetBundle.LoadFromFile(p);

                    //添加
                    AddAssetBundle(realPath, ab);
                }
                else
                {
                    AssetBundleWapper abw = null;
                    if (assetbundleMap.TryGetValue(realPath, out abw))
                    {
                        abw.Use();
                    }
                    else
                    {
                        return(null);
                    }
                }
            }


            return(LoadFormAssetBundle <T>(dependAssets.Last()));
        }
        /// <summary>
        /// 加载资源
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="abName"></param>
        /// <param name="objName"></param>
        /// <returns></returns>
        private Object LoadFormAssetBundle(ManifestItem item, Type t)
        {
            //判断资源结构 是单ab-单资源、单ab-多资源
            //单ab 单资源
            var sourceName = item.Name;

            //单ab 多资源
            if (!string.IsNullOrEmpty(item.Package))
            {
                item = this.config.Manifest.GetManifestItemByHash(item.Package);
            }

            Object            o   = null;
            AssetBundleWapper abr = null;

            if (assetbundleMap.TryGetValue(item.Hash, out abr))
            {
                switch ((ManifestItem.AssetTypeEnum)item.Type)
                {
                //暂时需要特殊处理的只有一个
                case ManifestItem.AssetTypeEnum.SpriteAtlas:
                {
                    o = abr.LoadTextureFormAtlas(sourceName);
                }
                break;

                default:
                {
                    o = abr.LoadAsset(sourceName, t);
                }
                break;
                }
            }
            else
            {
                BDebug.Log("资源不存在:" + sourceName, "red");

                return(null);
            }

            return(o);
        }
Example #4
0
        /// <summary>
        /// 加载AssetBundle
        /// </summary>
        /// <param name="path"></param>
        /// <returns></returns>
        private AssetBundle LoadAssetBundle(string path)
        {
            if (AssetbundleMap.ContainsKey(path))
            {
                AssetBundleWapper abw = null;
                if (AssetbundleMap.TryGetValue(path, out abw))
                {
                    abw.Use();
                    return(abw.AssetBundle);
                }
            }
            else
            {
                var p  = FindAsset(path);
                var ab = AssetBundle.LoadFromFile(p);
                //添加
                AddAssetBundle(path, ab);
                return(ab);
            }

            return(null);
        }