AssetBundleMaster_Introduce_CN

  这是一个AssetBundle打包以及资源加载的解决方案, 经过长时间迭代开发证明其正确性与便利性. 它实现了自动分包与打包, 实现了资源读取的所有逻辑, 甚至提供了更强大的API, 它在Prefab实例和场景的加载及管理上实现了资源的自动控制, 在一般资源的管理上使用了弱引用技术, 以在最大限度内保证资源不会被重复加载, 以及保证被卸载资源能够在内存中被正确清除.

  此项目支持Unity5, Unity2017, Unity2018, Unity2019

  它有以下几个特点 :

  1. 自动分包: 保证没有资源会被重复打包, 实现最小化总资源大小. 对于没有必要单独打包的资源, 让它自动分包, 实现最少化资源数量, 最优化加载速度.

  2. 自动资源处理: 如自动创建SpriteAtlas,  防止內建Shader重复编译等, 提供最基本的修正功能.

  3. 运行时资源自动控制: Prefab实例与场景的资源为完全自动控制, 当实例或场景被部销毁之后自动控制会决定是否释放资源, 所有资源在内存中不会被重复加载.

  4. 运行时资源半自动控制: 所有资源都使用了弱引用的中间层, 即使用户请求资源卸载不正确, 也能最大限度保证资源不被重复加载.

  5. 对开发者友好: 在编辑器下不需任何步骤即可正常加载资源, 并且任何加载模式下卸载资源都是正确的, 方便开发时Profiler. API都是单例模式, 遵循lazy-init原则, 加载接口都是参照UnityEngine.Resources接口设计, 符合用户习惯, 没有学习成本, 主要接口均有泛型和非泛型版本, 方便使用lua等脚本语言. 三个Button即可完成AssetBundle打包, 打包可选平台和版本, 并可以选择生成Patch文件标出不同版本的文件区别, 方便做资源更新.

  6. 免维护: 任何人请求卸载资源都不会导致其他人正在使用的资源被强制卸载, 开发人员只需要对自己请求的资源负责, 资源的卸载由自动控制决定, 减少开发的耦合, 减少工作流.

  7. 性能保证: 大量对象使用了对象池. 资源卸载通过AssetBundle.Unload(true)或是AssetBundle.Unload(false) + Resources.UnloadUnusedAssets()进行, 由自动控制决定, 最大限度保证资源卸载效率.

  8. 可计算的额外开销: 因为资源的自动控制需要一些额外的开销, 这些开销主要来自AssetBundle被加载后的序列化数据, 在不同平台有不同的表现. 如在PC平台每个序列化数据为2*7KB, 而Android平台每个序列化数据为2*256KB (来自Unity5的数据, 请以实际版本和平台为主). 可以方便计算出额外开销.

  9. 丰富的Demo场景: 此工程中有12个Demo场景和脚本, 所有API的使用都列举在其中, 配合Profiler可以方便地学习和验证. 

   

  这些就是AssetBundleMaster提供给你的, 简化打包工作流, 减少资源控制的耦合性, 强大的加载API.

  我们建议在任何情况下都不应该人为地手动去设置AssetBundle分包, 或不设置任由其自动分包, 即使你基于游戏更新或其它方面的考虑, 大部分情况下都与引擎特性不符, 希望这个解决方案能对你的项目和团队有帮助.

原文地址:https://www.cnblogs.com/tiancaiwrk/p/10594593.html