Unity AssetBundle依赖加载
来源:互联网 发布:魔卡幻想 淘宝号 编辑:程序博客网 时间:2024/06/05 04:48
//加载Bundle的依赖资源清单 private IEnumerator LoadAssetbundleManifest(Action<bool> action) { if (_assetBundleManifest != null) { if (action != null) action(true); } else { //依赖资源的名字和平台的名字一样加载时直接得到平台名称就可以了 string path = GameManager.Instance.GetFileFullPath(MiscUtils.GetCurrentPlatform() + "/" + MiscUtils.GetCurrentPlatform()); WWW www = new WWW(path); yield return www; if (www.isDone && www.error == null) { if (_assetBundleManifest != null) _assetBundleManifest = null; _assetBundleManifest = (AssetBundleManifest)www.assetBundle.LoadAsset("assetbundlemanifest"); www.assetBundle.Unload(false); if (action != null) action(true); } else { if (action != null) action(false); UIUtils.LogError("加载列表清单失败"); } } }
加载依赖资源和平时使用加载差不多,只是需要记录加载的次数,
/// <summary> /// 加载依赖资源 /// </summary> /// <param name="pathName"></param> public void LoadDependenciesBundle(string pathName) { if (_assetBundleManifest == null) { if (!bundelManifestName.Contains(pathName)) bundelManifestName.Add(pathName); //Debug.LogError("依赖加载清单是空的"); return; } if (bundelManifestName.Contains(pathName)) bundelManifestName.Remove(pathName); string[] manifestName = _assetBundleManifest.GetAllDependencies(pathName); for (int i = 0; i < manifestName.Length; ++i) { //加载的资源列表和已加载好的资源中存在该资源则不再加载该资源 if (_loadAssetBundle.ContainsKey(manifestName[i]) || GetHaveWWWBundle(manifestName[i])) { if (_loadAssetBundle.ContainsKey(manifestName[i])) _loadAssetBundle[manifestName[i]].count += 1; else { AssetBundleData ab = new AssetBundleData(); _loadAssetBundle.Add(manifestName[i], new AssetBundleData() { count = 1, }); } continue; } string manifestPath = GameManager.Instance.GetFileFullPath(MiscUtils.GetCurrentPlatform() + "/" + manifestName[i]); //异步加载的bundle LoadAssetBundle loadManifestBundle = new LoadAssetBundle(); loadManifestBundle.www = new WWW(manifestPath); loadManifestBundle.path = manifestPath; loadManifestBundle.key = manifestName[i]; //添加到下载列表 www.Add(loadManifestBundle); } } /// <summary> /// 卸载资源 /// </summary> /// <param name="name"></param> /// <param name="pathName"></param> public void UnLoadAssetBundle(string pathName) { pathName = pathName.ToLower(); //卸载资源 if (_loadAssetBundle.ContainsKey(pathName)) {// //Debug.LogError("卸载的依赖资源:" + pathName); _loadAssetBundle[pathName].count -= 1; if (_loadAssetBundle[pathName].count <= 0) { _loadAssetBundle[pathName].assetBundle.Unload(true); _loadAssetBundle.Remove(pathName); } } }
有时候游戏中需要动态更新资源,下载好之后要及时更新资源,如果加载了正在更新的资源需要Unload,(Unload(true)这里不能使用,IOS下会可能崩掉)
/// <summary> /// 检测更新资源包 /// </summary> /// <param name="pathName"></param> /// <returns></returns> public bool CheckLoadAssetBundle(string pathName) { if (_loadAssetBundle == null) return false; pathName = pathName.ToLower(); //卸载资源 foreach (string key in _loadAssetBundle.Keys) { if (pathName.Contains(key)) { UIUtils.LogError("检测更新资源包:" + key + "***********" + pathName); _loadAssetBundle[key].assetBundle.Unload(false); _loadAssetBundle.Remove(key); return true; } } return false; } //更新Bundle private void UpdateBundle() { if (www != null) { //异步加载资源 for (int i = 0; i < www.Count; ++i) { if (www[i].www.error != null) { UIUtils.LogError("www加载资源错误" + www[i].key); www.Remove(www[i]); } else if (www[i].www.isDone) { //Debug.LogError("www加载资源:" + www[i].key); if (!_loadAssetBundle.ContainsKey(www[i].key)) { _loadAssetBundle[www[i].key] = new AssetBundleData() { assetBundle = www[i].www.assetBundle, count = 1}; } else { if (_loadAssetBundle[www[i].key].assetBundle == null) _loadAssetBundle[www[i].key].assetBundle = www[i].www.assetBundle; _loadAssetBundle[www[i].key].count += 1; } www.Remove(www[i]); } //else // ++i; } //有未加载资源 } if (bundelManifestName != null && _assetBundleManifest != null) { while(bundelManifestName.Count > 0) LoadDependenciesBundle(bundelManifestName[0]); } }
阅读全文
0 0
- Unity AssetBundle依赖加载
- [unity]AssetBundle加载
- Unity AssetBundle 加载
- unity的assetbundle加载
- Unity创建Assetbundle与加载
- unity AssetBundle 加载资源 笔记
- unity AssetBundle打包以及加载
- Unity AssetBundle资源打包,Depend依赖关系
- Unity5.3.5加载AssetBundle包及依赖
- unity动态加载之AssetBundle应用
- unity动态加载之AssetBundle原理
- Unity 中WWW加载 AssetBundle---中文路径
- unity动态加载之AssetBundle应用
- 关于unity中Assetbundle动态加载
- Unity的动态加载AssetBundle资源笔记。
- Unity加载AssetBundle后shader丢失问题
- Unity AssetBundle加载错误(已解决)
- Unity场景打包AssetBundle并加载
- AngularJs模糊查询和修改密码
- html数据传到mysql简单例子
- 【java学习笔记】is-a、 has-a 、is-like-a、is-like-a
- 栈
- selenium + python环境搭建步骤
- Unity AssetBundle依赖加载
- 深入理解Java的final关键字
- cocos2dx C++ 遮罩使玩家头像为圆形
- JSP(Java Server Pages)的9大内置对象
- Java中异常机制
- myeclipse8.5 下 新建maven web 项目 问题解决
- golang中http包获取表单
- tablayout+fragment
- 用java压缩/解压文件