Unity3D之如何将包大小减少到极致
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之如何将包大小减少到极致的更多相关文章
- SQLSERVER复制优化之一《减少包大小》
原文:SQLSERVER复制优化之一<减少包大小> SQLSERVER复制优化之一<减少包大小> 自从搭了复制之后以为可以安枕无忧了,谁不知问题接踵而来 这次遇到的问题是丢包, ...
- apk瘦身(包大小优化)
最近太忙好久没有写随笔,放假才有空写写随笔. 最近在项目中一直在做包大小优化 随着业务需求的增加,包大小是忍不住的往上涨 为了提高应用市场下载转化率,一直在优化包大小 首先 分析你的apk中占比的主要 ...
- .NET Core 2.0 应用程序大小减少50%
.NET Core 2.0减小体积瘦身官方工具 IL Linker. IL Linker 来源于mono的linker https://github.com/mono/linker,目前还是预览版本 ...
- .NET Core 2.0应用程序大小减少50%
.NET Core 2.0应用程序减小体积瘦身官方工具 IL Linker. IL Linker 来源于mono的linker https://github.com/mono/linker,目前还是 ...
- 6.关于Xamarin Android对APK包大小的处理
降低学习成本是每个.NET传教士义务与责任. 建立生态,保护生态,见者有份. 对于apk 包的大小大家都是很敏感的,虽然现在安卓手机的性能和存储越来越厉害了.本着能少一点是一点的态度,我们还是要深入理 ...
- [转]SOCKET通信中TCP、UDP数据包大小的确定
TCP.UDP数据包大小的确定 UDP和TCP协议利用端口号实现多项应用同时发送和接收数据.数据通过源端口发送出去,通过目标端口接收.有的网络应用只能使用预留或注册的静态端口:而另外一些网络应用则可以 ...
- SQLSERVER复制优化之一《改变包大小》
SQLSERVER复制优化之一<改变包大小> 自从搭了复制之后以为可以安枕无忧了,谁不知问题接踵而来 这次遇到的问题是丢包,不知道情况的读者可以先看一下我之前写的一篇<SQLSERV ...
- [转]TCP、UDP数据包大小的确定
TCP.UDP数据包大小的确定 http://blog.163.com/jianlizhao%40126/blog/static/1732511632013410101827640/ U ...
- TCP、UDP数据包大小的限制(UDP数据包一次发送多大为好)——数据帧的物理特性决定的,每层都有一个自己的数据头,层层递减
1.概述 首先要看TCP/IP协议,涉及到四层:链路层,网络层,传输层,应用层. 其中以太网(Ethernet)的数据帧在链路层 IP包在网络层 TCP或UDP包在传输层 TCP或UDP中的数据(Da ...
随机推荐
- EasyPusher:基于live555的DarwinInjector实现的RTSP直播推送程序
先简单介绍一下EasyPusher的功能,后面再对具体内部架构做介绍: EasyPusher:https://github.com/EasyDarwin/EasyPusher EasyPusher是什 ...
- wireshark 学习 1
wireshark 调试WiFi 安装之后的启动脚步. #!/bin/bash iw dev mon0 del iw dev wlp3s0 interface add mon0 type monito ...
- jps不显示java进程信息
本来想自己整理,发现已经有前人整理,并且完美解决了我的问题,故转载,感谢分享 转自:http://trinea.iteye.com/blog/1196400 对于jps较熟悉可以直接查看第二部分的分析 ...
- Struts多个文件上传
Struts2多个文件上传 10级学员 韩晓爽课堂笔记 多个文件上传分为List集合和数组,下面我们着重介绍一下list集合的上传.都大同小异. 一 介绍 1. 在struts2文件上传的时候要先导入 ...
- 【 spring配置文件详解】
转自: http://book.51cto.com/art/201004/193743.htm Spring配置文件是用于指导Spring工厂进行Bean生产.依赖关系注入(装配)及Bean实例分发的 ...
- 创建一个catkin工作空间
先确定自己的环境变量是否设置正确 export | grep ROS 若出现如下的,说明是正确的 declare -x ROSLISP_PACKAGE_DIRECTORIES="" ...
- Linux 驱动面试题总结【转】
本文转载自:http://zkread.com/article/872291.html 1. Linux设备中字符设备与块设备有什么主要的区别?请分别列举一些实际的设备说出它们是属于哪一类设备. 字符 ...
- [转]FPGA实践——基于ROM访问的直接波形合成
本文原创,转载请注明出处:http://www.cnblogs.com/risten/p/4166169.html 1.系统原理 通过频率控制字选择相位步进,产生访问ROM的地址,进而控制DAC的输出 ...
- codeforces 465C.No to Palindromes! 解题报告
题目链接:http://codeforces.com/problemset/problem/464/A 题目意思:给出一个长度为 n 且是 tolerable 的字符串s,需要求出字典序最小的长度也为 ...
- php排序方法之快速排序
$arr = array(3,55,45,2,67,76,6.7,-65,85,4); function quickSort($arr){ if (count($arr) <= 1){ retu ...