/// <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); }
/// <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); }