[Unity]浅谈AssetBundle的依赖关系打包与加载

.写在前面

  通过AssetBundle进行资源管理很方便.AssetBundle的打包与加载策略有很多种,本文来讲一种可以随意通过资源名来加载指定目录下资源的打包方法.意在加深对资源管理的理解.

.策略介绍

  1.打包的粒度划分的策略

    ①     所有在指定目录下的文件,即RootList,都被打包成单独结点

    ②     对于RootList所依赖的所有资源,即DepList,依赖数大于1的,被打包成单独结点,等于1的,向上合并至被依赖结点.

    ③     记录打包信息

  2.下载策略

    ①     下载配置文件

    ②     更新AssetBundle文件

  3.加载的策略

    ①     资源所对应的Hint不存在,报告不存在异常,若存在转下

    ②     Hint引用数增加,依赖的Hint引用数增加

    ③     若Hint内Bundle为空,加载Bundle,并加载依赖的Hint中未加载的Bundle

    ④     若Hint内MainAsset为空,加载MainAsset

    ⑤     返回Hint内MainAsset

  4.释放策略

    ①     资源所对应的Hint不存在,报告不存在异常,若存在转下

    ②     所有依赖的Hint引用数减1,对应的Hint引用数减1

    ③     若Hint为引用数为0时, 置空MainAsset,并对Bundle调用Unload(true)

.注意

       1.AssetBundle在加载自身内Asset时,需要保证所以来的资源都在此Bundle内或者在其它被加载上来的AssetBundle中才能保证加载完全正确.

2.打包资源时可以要有过滤,将不打包的的类型或者指定资源滤出.

3.可拓展:记录文件MD5变化,进行增量打包.

  4.本方式可以最大程度上减少AssetBundle的加载资源内存占用,但是会增加AssetBundle数量.

 四.源码

  MonsterABSystem

时间: 2024-10-14 09:43:36

[Unity]浅谈AssetBundle的依赖关系打包与加载的相关文章

浅谈DevExpress<三>:在GridView中加载动态图片

今天的演示效果如下:在GridView中的下拉框中选中一种颜色,则后面的加载相应的图片,如下图: 1. 2. 3. 下面说下实现方法:首先在项目中拉一个GirdControl,在里面创建4列:ID,Name,Color,Image,并将Color和Image分别创建repositoryItemComboBox和repositoryItemPictureEdit控件,如下图: 将一个图片文件夹放到程序的启动目录中: 文件夹中包含如下图片: 接下来进行创建数据模板,先创建一个Datetable,添加

Unity 浅谈AssetBundle 游戏资源

--刚刚做完一个xlua的的热更项目,对AssetBundle资源分类总结一下.纯理论,闲谈知识,要是有建议,尽管提 ,不掺杂代码. --这里说说,AB是如何打包,如果下载,如何加载. 关键词理解:依赖,被依赖,公共, 非公共,. 1.如何打包? 游戏资源的话,我这里是分为两大类. 常驻资源 I.常驻公共资源(主界面图集,背景音乐等的必须要加载的资源) ||.非 常驻公共资源(战斗界面图集,因为存在只登录游戏,不进战斗的情况) 非常驻资源 |||.经常反复资源 V.其他 2.下载资源? 下载资源

[Unity3d][NGUI]两种思路解决AssetBundle的依赖关系.

接上文. 使用上文中的AssetBundle打包方式生成的文件包括了依赖关系中的文件. 一般的使用中并不会发现什么问题. 可是当配合NGUI的时候,使用dynamicFont时打包AssetBundle会将每一个组件使用的dynamicFont都分开打包进去. 导出函数请參考:导出资源 导出资源包时出现的问题: 如图: 在解决依赖关系上我使用过2种方案: 第一种是使用BuildPipeline中的PushAssetDependencies和PopAssetDependencies方法来解决依赖关

u3d外部资源 打包与加载的问题

被坑了一下午,调bug,u3d外部加载资源一会可以,一会不行,始终找不到问题,最后快下班的时候,重新试了一下,原来是资源打包之前的文件名,和之后的加载资源名必须一样 [MenuItem("Custom Editor/Build AssetBundle From Selection Twice")] static void ExportResourceNoTrack() { // Bring up save panel string path = EditorUtility.SaveFi

未能加载文件或程序集“Oracle.DataAccess”或它的某一个依赖项。试图加载格式不正确的程序。

上一篇文章说到了DLL引用问题,主要是说的程序中如果使用过了反射,则反射创建对象的dll必须放在web应用程序的bin目录里.今天又遇到了一个类似的问题,mvc3的应用程序,发布到iis上时,报:”未能加载文件或程序集“Oracle.DataAccess”或它的某一个依赖项.试图加载格式不正确的程序.“.原因很简单,因为我发的时候,我项目中的oracle提供的asp.net访问oralcle数据库的这个 Oracle.DataAccess.dll的本地复制没有设置为true(在项目引用里找到该引

引用64位dll时候出现 未能加载文件或程序集“System.Data.SQLite”或它的某一个依赖项。试图加载格式不正确的程序。

引用64位dll时候出现 未能加载文件或程序集“System.Data.SQLite”或它的某一个依赖项.试图加载格式不正确的程序. 需要在web.config增加配置 <startup useLegacyV2RuntimeActivationPolicy="true"> <supportedRuntime version="v4.0"/> </startup>

.NET 未能加载文件或程序集&ldquo;xxx&rdquo;或它的某一个依赖项。试图加载格式不正确的程序。

症状: 未能加载文件或程序集"xxx"或它的某一个依赖项.试图加载格式不正确的程序.说明: 执行当前 Web 请求期间,出现未处理的异常.请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息.异常详细信息: System.BadImageFormatException: 未能加载文件或程序集"xxx"或它的某一个依赖项.试图加载格式不正确的程序.源错误:执行当前 Web 请求期间生成了未处理的异常.可以使用下面的异常堆栈跟踪信息确定有关异常原因和发

“System.BadImageFormatException”类型的未经处理的异常在 PurchaseDevices.Access.dll 中发生 其他信息: 未能加载文件或程序集“System.Data.SQLite, Version=1.0.66.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139”或它的某一个依赖项。试图加载格式不正确

引用sqlite的程序集时,有时会报如下异常: "System.BadImageFormatException"类型的未经处理的异常在 PurchaseDevices.Access.dll 中发生 其他信息: 未能加载文件或程序集"System.Data.SQLite, Version=1.0.66.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139"或它的某一个依赖项.试图加载格式不正确的程序. 解决方案:在配置

未能加载文件或程序集“Common”或它的某一个依赖项。试图加载格式不正确的程序

原因:操作系统是64位的,但发布的程序引用了一些32位的ddl,所以出现了兼容性的问题解决方案一:如果是64位机器,IIS--应用程序池--高级设置--启用32位应用程序 :true.解决方案二:修改项目属性--生成--目标平台(比如,X86\X64)未能加载文件或程序集"Common"或它的某一个依赖项.试图加载格式不正确的程序