Unity中ab包压缩方案 LZMA 和LZ4

这篇具有很好参考价值的文章主要介绍了Unity中ab包压缩方案 LZMA 和LZ4。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

LZMA


1.LZMA采用流压缩方式(stream-based),压缩率会比LZ4更高,体现在包体更小,但是问题也很严重。LZMA只支持顺序读取,所以加载AB包时,需要将整个包解压,会造成卡顿和额外内存占用。这也是为什么在有些复杂UI上首次打开会造成卡顿。

2.加载AB包后将所有资源进行了缓存,导致了如果AB包资源利用率在短时间利于率不高的时候,造成了很高的内存浪费。

3.一套引用计数规则非常复杂,当资源过多的时候建立引用关系都是很费时的,其中的常驻包的设置逻辑也是非常具有不确定性。

LZ4优化


1.LZ4采用块压缩方式(chunk-based),块压缩的数据被分为大小相同的块,被分别压缩,虽然压缩率不及LZMA,但是读取效率比LZMA高非常多

2.LZ4压缩的AB包,使用LoadFromFile()或LoadFromStream()只会加载AB包的Header,相比于直接加载解压整块AB包,效率更进一步提高。另外一个很重要的点,由于可以只加载Header,因此AB包可以做到一旦加载到内存后就再不卸载,此时只需要管理从AB包中读取出来的资源的生命周期。

3.对于之前使用引用计数的优化,由于Unity原本资源管理就是使用引用计数去维护,这里再建立一套内部的引用计数,不仅多余而且很浪费CPU资源,而且效果不一定很好。这个时候我们可以建立一套弱引用管理体系,通过弱引用去持有资源,在触发Resource.UnloadUnusedAssets()再去清除弱引用失效的对象。
 

将LZMA的压缩方式修改为LZ4

将打包参数添加BuildAssetBundleOptions.ChunkBasedCompression即可

BuildAssetBundleOptions buildOption = BuildAssetBundleOptions.IgnoreTypeTreeChanges | BuildAssetBundleOptions.DeterministicAssetBundle | BuildAssetBundleOptions.ChunkBasedCompression;

LZ4读取AB包

//读取ab包
AssetBundle.LoadFromFileAsync(url)

这里需要注意一点的就是,LoadFromFileAsync与WWW或UnityWebRequest区别在于是在windows下不需要file://前缀文章来源地址https://www.toymoban.com/news/detail-504203.html

到了这里,关于Unity中ab包压缩方案 LZMA 和LZ4的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • FPGA纯verilog实现 LZMA 数据压缩,提供工程源码和技术支持

    目录 1、前言 2、我这儿已有的FPGA压缩算法方案 3、FPGA LZMA数据压缩功能和性能 4、FPGA LZMA 数据压缩设计方案 输入输出接口描述 数据处理流程 LZ检索器 数据同步 LZMA 压缩器 为输出LZMA压缩流添加文件头 5、vivado仿真 6、福利:工程代码的获取 说到FPGA的应用,数据压缩算法的硬

    2024年02月03日
    浏览(49)
  • 【Git协同】误采用压缩包下载进行开发后如何将代码合入主干

    有时候对于一些使用git协同的项目,不小心可能会采用压缩包的方式下载代码,当在此代码上进行修改后才发现项目里压根没有git相关文件,这里提供一种针对此类现象的解决方案。 有两个协同开发者,开发者2误使用压缩包的方式下载代码进行修改,此时master分支已经被开

    2024年02月11日
    浏览(39)
  • 【Unity】AB包下载

    a.AB包分类 一般地,将预制体作为AB包资源,不仅需要对预制体本身进行归类,还要对其涉及的动画(AnimationClip)、动画状态机(AnimatorController)、以及所用到的骨骼(Avatar)、模型(Mesh)、模型所用的材质(Matreial)、材质所用的图片(Images)、Shader等进行归类。 还有一种

    2024年01月23日
    浏览(40)
  • Unity-AssetBundles(AB包)

    AssetBundles AssetBundle工作流 将Asset分配给AssetBundles 构建AssetBundles 加载AssetBundles和Asset 为AssetBundles准备 类型分组 并发内容分组 资产建筑AssetBundles BuildAssetBundleOptions BuildTarget The AssetBundle File  The Manifest File  AssetBundle依赖性 AssetBundles信息 加载AssetBundles  使用原生AssetBundles AssetB

    2024年02月02日
    浏览(40)
  • Unity--AB包管理插件-xasset

    1. 基本使用 1. 构建配置文件 1. SplitConfig 创建SplitConfig文件,在xasset目录中选中Settings文件,将创建的SplitConfig文件赋值给对应参数。 2. Group 创建Group文件,将需要打包的文件和文件夹拖拽到Entries中 Filter过滤器将决定哪些文件会被过滤(例:t:Material) 设置Bundle Mode,将决定以

    2023年04月09日
    浏览(32)
  • Unity组件开发--AB包打包工具

    1.项目工程路径下创建文件夹:ABundles 2.AB包打包脚本: 3.需要打包的场景添加到打包配置: 4.unity编辑器生成菜单: 5.场景加载AB包管理器:

    2024年04月28日
    浏览(39)
  • Unity知识点 -- AssetBundle(AB包)

    特定于平台的资产压缩包,类似于压缩文件 资产包括:模型、贴图、预制体、音效、材质球等 2.1 相对于 Resources 下的资源,AB 包更好管理资源 Resource:打包时定死,只读,无法修改 AB包:存储位置可以自定义,压缩方式可以自定义,后期可以动态更新,通过 AB 包可以做热更

    2024年02月13日
    浏览(45)
  • Unity学习笔记之AB包(AssetBundle)

    存储在Resources下的资源,最终会存储在游戏的主体包中,发送给用户,手机系统上,如果需要做资源的更新,是无法使用Resources即时更新(不需要关闭手机游戏,即可实现游戏更新). AB包是 独立于游戏主包存在的资源存储文件 ,使用内部资源时,需要单独下载和加载。 AB包

    2024年03月10日
    浏览(45)
  • Unity-WebGL加载AB包

    上文写到PC、IOS、Android项目加载ab包资源,地址: 打包的步骤和上文中的操作相同,唯一的不同就是在Build页面里Build Target选择WebGL。   当项目使用内置渲染管线时,所有材质的Shader为Standard。 1、当项目为URP时,首先需要在Package Manager里导入Universal RP,如图 2、Create—Renderi

    2024年03月11日
    浏览(42)
  • Unity热更新——AssetBundle(AB包)+管理器

    游戏或者软件更新时,无需重新下周客户端进行安装,而是在应用程序启动的情况下,在内部进行的资源或者代码更新 特定于平台的资产压缩包,有点类似压缩文件,资产包括:模型、贴图、预设体、音效、材质球等等 相对Resources下的资源,AB包更好管理资源,区别是: A

    2024年02月04日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包