Unity3D之如何将包大小减少到极致

Unity3D之如何将包大小减少到极致

转自:http://www.luzexi.com/unity3d之如何将包大小减少到极致/

Unity3D之如何将包大小减少到极致

Unity3D之如何将包大小减少到极致,图片是游戏app里最最占空间的资源,所以请各位还没有理解u3d对图片文件存储方式理解的请看《unity3d-texture图片空间和内存占用分析》。因为u3d对资源的压缩并不阐述的十分详细,所以很多项目在遇到包大小瓶颈时非常头疼。我也不是神仙,也同样痛苦过,但经历几个项目的折腾,最终能梳理出一套能将u3d包大小减少到合理范围的方法。

首先来展示下,官方如何说的:

http://docs.unity3d.com/Manual/ReducingFilesize.html 官方手册)

1.替换jpg,使用psd,减少重复资源

2.剔除不必要的资源

3.打包时查看log纪录,由此判断需要减少的文件类型

4.优化,压缩图片,减少图片大小

5.优化,压缩网格和动画,减少文件大小

6.剔除system.dll和system.xml.dll ,尽量不要依赖他们,或用其他组件来代替。

这个官方解释对我们帮助甚少。所以,我们还需要一样利器,www.LoadFromCacheOrDownload。我把包分成三段:1.首包(里面包含了最最必要的资源)。2.首次进入包加载(加载游戏运行必要的资源)。3.游戏运行中资源加载(按每个游戏不同各自定义,以场景和单位个体为主要,在画面进入时加载资源,加载结束后再运行并显示)。

关于u3d的AssetBundle资源加载与打包封装,请查看《unity3d之assetbundle资源加载封装》这篇文章。

重点来了,www.LoadFromCacheOrDownload在加载AssetBundle后会将其解压后的资源存储到本地文件夹中,这样虽然下载的包小,但解压后的包依旧很大。解决方法:首先将资源包打包中加密并命名为.bytes后缀,最后再加载是就不会被解压为资源存储再本地,因为它无法识别我们加密后的AssetBundle资源,再读取资源时需要使用AssetBundle.CreateFromMemory将,解码后的2进至数据变为我们可用的AssetBundle。

这个方法能灵活运用这如下方式:我将n个资源包加密后打包成n个2进至文件,再将这些加密文件再次打包成1个正常的AssetBundle文件,在使用www.LoadFromCacheOrDownload时从网络加载完成后,本地应用存储的就时n个我们加密后的2进至文件了,而并非被u3d解压后的正常的资源文件。这样做进一步缩小了本地资源的大小。

我经过实验计算了一下,一个不做任何压缩手段的有1G大小的u3d的app,压缩到极致,可以到150mb左右,而这个数字时整包大小。如果你做成我所说的三段加载,首包可以压到50mb以内,有些甚至30mb以内(不同游戏不一样,不同设计也不一样)。当然,这样做,整包可能会大一点,因为资源依赖被拆分了,所以资源重复还时避免不了的。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/100439.html原文链接:https://javaforall.net

(0)
上一篇 2021年5月11日 下午7:00
下一篇 2021年5月11日 下午8:00


相关推荐

  • OpenClaw(智能机械臂系统)快速入门指南:2026年全流程部署与核心功能解析

    OpenClaw(智能机械臂系统)快速入门指南:2026年全流程部署与核心功能解析

    2026年3月13日
    3
  • idea配置tomcat error:duplicate context path

    idea配置tomcat error:duplicate context pathidea 配置 tomcaterror duplicatecon nbsp 解决方法 nbsp nbsp nbsp nbsp 在 editconfig 中部署 tomcat nbsp nbsp nbsp nbsp nbsp server nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp tomcathome nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp D software apache tomcat 7 0 65 nbsp nbsp nbsp

    2026年3月18日
    2
  • 数据库建立索引常用的原则「建议收藏」

    数据库建立索引常用的原则「建议收藏」1、表的主键、外键必须有索引;2、数据量超过300的表应该有索引;3、经常与其他表进行连接的表,在连接字段上应该建立索引;4、经常出现在Where子句中的字段,特别是大表的字段,应该建立索引;5、索引应该建在选择性高的字段上;6、索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引;7、复合索引的建立需要进行仔细分析;尽量考虑用单字段索引代替:          A、…

    2022年7月24日
    8
  • 变量命名神器Codelf

    变量命名神器Codelf网站首页

    2022年5月4日
    52
  • 33.form标签中的GET和POST提交方式

    33.form标签中的GET和POST提交方式form 标签中的 GET 和 POST 在 HTML 中 form 表单的作用是收集标签中的内容 form form 中间可以由访问者添加类似于文本 选择 或者一些控制模块等等 然后这些内容将会被送到服务端 一个表单必须指定两样东西 form 的 method 参数用于设置表单的提交方式 默认使用 POST action 用于设置表单的提交 url 如果不写或者保持空字符串 那么将使用当前的 URL form 表单使用 post 方式提交的例子 下面例子实现流程 当我们第一次访

    2026年3月18日
    2
  • Java判断对象是否为空的方法:isEmpty,null,” “[通俗易懂]

    Java判断对象是否为空的方法:isEmpty,null,” “[通俗易懂]今天修改辞职同事遗留的代码才发现这个问题,不能用isEmpty来判断一个对象是否为null,之前没在意这个问题,在报了空指针之后才发现这个问题。查了一下关于判断为空的几个方法的区别,这里做一个简单的总结:null一个对象如果有可能是null的话,首先要做的就是判断是否为null:object==null,否则就有可能会出现空指针异常,这个通常是我们在进行数据库的查询操作时,查询结果首…

    2022年6月13日
    95

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号