http://www.luzexi.com

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之如何将包大小减少到极致的更多相关文章

  1. SQLSERVER复制优化之一《减少包大小》

    原文:SQLSERVER复制优化之一<减少包大小> SQLSERVER复制优化之一<减少包大小> 自从搭了复制之后以为可以安枕无忧了,谁不知问题接踵而来 这次遇到的问题是丢包, ...

  2. apk瘦身(包大小优化)

    最近太忙好久没有写随笔,放假才有空写写随笔. 最近在项目中一直在做包大小优化 随着业务需求的增加,包大小是忍不住的往上涨 为了提高应用市场下载转化率,一直在优化包大小 首先 分析你的apk中占比的主要 ...

  3. .NET Core 2.0 应用程序大小减少50%

    .NET Core 2.0减小体积瘦身官方工具 IL Linker. IL Linker 来源于mono的linker  https://github.com/mono/linker,目前还是预览版本 ...

  4. .NET Core 2.0应用程序大小减少50%

    .NET Core 2.0应用程序减小体积瘦身官方工具 IL Linker. IL Linker 来源于mono的linker  https://github.com/mono/linker,目前还是 ...

  5. 6.关于Xamarin Android对APK包大小的处理

    降低学习成本是每个.NET传教士义务与责任. 建立生态,保护生态,见者有份. 对于apk 包的大小大家都是很敏感的,虽然现在安卓手机的性能和存储越来越厉害了.本着能少一点是一点的态度,我们还是要深入理 ...

  6. [转]SOCKET通信中TCP、UDP数据包大小的确定

    TCP.UDP数据包大小的确定 UDP和TCP协议利用端口号实现多项应用同时发送和接收数据.数据通过源端口发送出去,通过目标端口接收.有的网络应用只能使用预留或注册的静态端口:而另外一些网络应用则可以 ...

  7. SQLSERVER复制优化之一《改变包大小》

    SQLSERVER复制优化之一<改变包大小> 自从搭了复制之后以为可以安枕无忧了,谁不知问题接踵而来 这次遇到的问题是丢包,不知道情况的读者可以先看一下我之前写的一篇<SQLSERV ...

  8. [转]TCP、UDP数据包大小的确定

       TCP.UDP数据包大小的确定   http://blog.163.com/jianlizhao%40126/blog/static/1732511632013410101827640/   U ...

  9. TCP、UDP数据包大小的限制(UDP数据包一次发送多大为好)——数据帧的物理特性决定的,每层都有一个自己的数据头,层层递减

    1.概述 首先要看TCP/IP协议,涉及到四层:链路层,网络层,传输层,应用层. 其中以太网(Ethernet)的数据帧在链路层 IP包在网络层 TCP或UDP包在传输层 TCP或UDP中的数据(Da ...

随机推荐

  1. 关于js开发的小问题

    一.开发当中经常会动态拼接html,当然为了简便性好多人直接就是使用内联事件: $('#td1').html( '<a href="#" onclick="app. ...

  2. webstrom编辑react语法报错解决

    问题: 解决办法:1.把 JavaScript 的版本设置为 JSX Harmony. 2.把<script>type类型改为:text/jsx

  3. 阻止SSIS import excel时的默认行为

    为什么SSIS总是错误地获取Excel数据类型,以及如何解决它! 由Concentra发布 2013年5月15日 分享此页面 分享   发现Concentra的分析解决方案 Concentra的分析和 ...

  4. RTP/RTCP学习笔记 -- RFC 3550

    The MTU of RTP package payload is (IP) - (UDP) - = 1472   #define DEFAULT_MAX_PACKET_SIZE 1200 video ...

  5. 诡异的json包含bom头

    今日项目碰到 需要调用php的一个接口  结果一直报返回的json字符串转对象  bom头报错 Exception in thread "main" com.fasterxml.j ...

  6. [haoi2014]穿越封锁线

    这题需要注意的一点是射线法需要考虑边界,而且题目对边界的限制极为严格. dcmp(v[i%n].x-x)<=0&&dcmp(v[(i+1)%n].x-x)>0 dcmp(v ...

  7. android系统启动框架、Activity界面显示过程详解

    一.Android系统框架 android的系统架构和其操作系统一样,采用了分层的架构.从架构图看,android分为四个层,从高层到低层分别是应用程序层.应用程序框架层.系统运行库层和linux核心 ...

  8. PHP执行外部命令【转】

    PHP是完全支持外部命令的,但是出于安全考虑,一般很少使用. PHP提供共了3种方法调用外部命令: (1)调用执行外部命令函数(system(),exec(),passthru(),shell_exe ...

  9. C#入门---1、C#装备知识(C#如何学习)

    C#入门---1.C#装备知识(C#如何学习) 一.总结 一句话总结: 主视频,辅助书和教程:还是得看视频,直接看书或者看教程效率不高 1.C#和.NET的关系和区别? .net是一个平台,核心是.n ...

  10. maven中常用命令

    1. 更新本地仓库, 首先确认C:\users\pengqiong\ 路径下有相应的pom文件 mvn clean package install: