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

转载 2015年07月10日 11:40:29

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 ,尽量不要依赖他们,或用其他组件来代替。

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

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

下面说说关于动态资源加载和资源导入内存的所有方式,这是优化资源的必要条件,因为只有你知道了所有的加载和导入途径你才能对项目资源优化进行全面的分析。知道了有哪几条路你才能选择一条最好的。如下:

利用动态资源加载有几种方式:

1.将资源放入assetstream文件夹随打包一起打入文件。

2.将部分资源放在服务器,游戏前或游戏中进行加载,并保存到本地。

3.将资源压缩成多个zip文件放在服务器,客户端下载这些zip文件合成一个zip文件进行解压。

其实www.LoadFromCacheOrDownload加载机制也可以算一种,但好像u3d4.5.2开始已经摒弃这个接口,不再开放,因为它也开始意识到这个接口容易给人造成误解,而且不好用。

资源导入内存的方式有几种:

1.从Resources文件夹中导入。这是阻塞加载最常见的方式,接口Resources.Load();

2.从某地址加载资源www。这是异步加载最常见方式,接口new www(path);

3.直接从文件或者bytes[]生成AssetBundl,接口:AssetBundle.CreateFromFile阻塞方法, AssetBundle.CreateFromMemory异步方法,AssetBundle.CreateFromMemoryImmediate阻塞方法

4.使用File类加载文件,File.ReadAllBytes,File.ReadAllText。

有了资源加载和内存导入后,还需要配备资源验证方式,这样整个项目动态加载体制才完善。资源版本更新方式可以使用json格式并以文件形式查看。验证方式的理解,还需要大家使用在项目里才能体会到真正的用途,才能将原理牢记于心。

验证资源版本有几种:

1.资源整体验证。步骤:1.客户端向服务器发送资源版本。2.服务器匹配最近版本号,若版本号不同,比较两个版本号之间的内容差异,发送差异资源地址。3.客户端删除差异内容中需要删除的文件资源,加载需要下载的文件资源并保存文件。最后保存版本号。

2.单个资源文件的时间戳验证。步骤:1.客户端向服务器发送资源版本号。2.服务器匹配最新版本号,如果不同就重新发送一份资源版本列表,里面包含了资源文件的时间戳。3.保存版本列表。4.在客户端需要加载该资源时比较时间戳是否一致,如果不一样或这不存在就加载资源文件并保存固定时间戳。

3.单个资源文件md5验证。步骤:1.客户端向服务器发送资源版本号。2.服务器匹配最新版本号,如果不同重新发送一分资源版本列表,里面包含了资源文件的md5码。3.客户端比较新旧资源版本列表中的,删除需要删除的和更新的资源。4.在客户端需要加载该资源时查看文件是否存在,如果存在就说明资源是最新的。如果不存在则需要实时下载。

相关文章推荐

unity3d 减少文件大小

减少文件大小 Unity 后处理所有导入的资源 Unity 始终后处理导入的文件,因此,在使用多层 psd 文件代替 jpg 储存文件,对将要部署的播放器大小没有任何影响。保存文件为正在使用的格式...

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

http://www.luzexi.com Unity3D之如何将包大小减少到极致,图片是游戏app里最最占空间的资源,所以请各位还没有理解u3d对图片文件存储方式理解的请看《unity3d...

unity安卓包大小压缩优化(146M优化到83M)

想要压缩包大小,首先得知道打包出来的各个资源的大小,明确知道哪些资源占用大,可以通过如下操作打开Editor.log(可能需要先输出一遍安卓包) 1、在Unity Console界面右上角点开Open...

浅析:Unity3D开发的游戏如何降低包体大小

众所周知,通过Unity3D开发的手游包体普遍偏大,动则几百M的安装包,而包体大则会导致手游推广的成本增大,也会影响到用户转化率。除去其他因素,用户在选择下载时,会着重关注游戏包体大小,游戏包体体积过...

【Unity】内存优化

1.压缩自带类库; 2.将暂时不用的以后还需要使用的物体隐藏起来而不是直接Destroy掉; 3.释放AssetBundle占用的资源;AssetBundle资源包; 4.降低模型的片面数,降低模型的...

Unity 图片大小设置

最近换新的UILoading界面,其中关键点涉及2个, * 加载速度,所以是没有采用Bundle加载的方式,而是放在放在Resouce文件下,用LoadPrefab = Resources.L...

Unity内存优化经验分享

笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:《手把手教你架构3D游戏引擎》电子工业出版社和《Unity3D实战核心技术详解》...
  • jxw167
  • jxw167
  • 2017年01月08日 12:55
  • 1300

unity设置包最小

unity 裸包apk 7.69m +NGUI +反编译=7.93M  打包时的引用库,改一改build设置即可。 对于一个新项目来说不会有太大问题,但是如果是已经存在的项目,可能...

Unity内存优化经验分享

笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:《手把手教你架构3D游戏引擎》电子工业出版社和《Unity3D实战核心技术详解》...
  • jxw167
  • jxw167
  • 2017年01月08日 12:55
  • 1300

unity打包原理解析

工具 Unity 中的资源来源有三个途径:一个是Unity自动打包资源,一个是Resources,一个是AssetBundle。 Unity自动打包资源是指在Unity场景中直接使用到的资源会...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Unity3D之如何将包大小减少到极致
举报原因:
原因补充:

(最多只允许输入30个字)