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

摘要:
Unity3D之如何将包大小减少到极致,图片是游戏app里最最占空间的资源,所以请各位还没有理解u3d对图片文件存储方式理解的请看《unity3d-texture图片空间和内存占用分析》。我也不是神仙,也同样痛苦过,但经历几个项目的折腾,最终能梳理出一套能将u3d包大小减少到合理范围的方法。关于u3d的AssetBundle资源加载与打包封装,请查看《unity3d之assetbundle资源加载封装》这篇文章。

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以内(不同游戏不一样,不同设计也不一样)。当然,这样做,整包可能会大一点,因为资源依赖被拆分了,所以资源重复还时避免不了的。

免责声明:文章转载自《Unity3D之如何将包大小减少到极致》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇前端-网页打印-Jqprint-网页打印像素设置jquery EasyUi 添加节点、展开所有节点、默认选中第一个节点下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

【Unity游戏开发】AssetBundle杂记--AssetBundle的二三事

一、简介   马三在公司大部分时间做的都是游戏业务逻辑和编辑器工具等相关工作,因此对Unity AssetBundle这块的知识点并不是很熟悉,自己也是有打算想了解并熟悉一下AssetBundle,掌握一下Unity资源管理方面的知识,因此有了这篇博客。   我会在博客中整理出一些自己学习时收集到的一些比较好的AssetBundle学习资料,并且结合现在正...

Unity_AssetBundle笔记_(二)转(俗称AB包_个人笔记欢迎指正)

unity_打assetBundle和加载方案—— 转载(个人笔记的补充) 一、如何组织assetBundle: unity5以前,打包需要自己去找依赖,然后需要按照拓扑图顺序压入AB栈,这样在最后打AB时才能有效利用依赖(栈内已有的AB才能作为依赖)。 unity5.x后,打包变得简单,但如何组织assetBundle依然需要琢磨和规划。  首先我们需要...

使用Unity3D生成网格并加贴图

        在使用Unity3D进行开发时,我们通常需要生成自己的网格来进行控制,比如进行图像变形等等。本文将介绍如何在Unity3D中生成一个网格。         首先,需要在空间中生成顶点,然后在定义三角面片顶点序号。生成网格的代码如下: using UnityEngine; using System.Collections; public...

使用 async-await 简化代码的检讨

  从API版本升级到4.6之后, Unity支持了async和await语法, 并且根据测试来看, 它运行在主线程里, 跟一般的C#编译不大一样, 这就很有操作空间了, 先来看看普通C# Console工程和Unity中运行的差别:   1. C# Console using System; namespace AsyncTest { clas...

unity3D 预制件笔刷的创建和使用

第一步:创建预制件笔刷 在Assets下右键  第二步:设置参数和添加预制件 点击创建好的预制件刷子,在属性size中输入1,然后将预制件对象拖入下方位置     第三步:选择预制件刷子,绘制地图  ①打开2D地图绘制面板  ②选择刚刚创建的笔刷  ③选择绘制层,绘制地图  效果  补充:鼠标一直点,会一直创建对象,请注意创建对象的次数....

Unity资源内存管理--webstream控制

一 使用前提 1,需要使用资源热更新 2,使用Assetbundle资源热更(AssetBundle是产生webstream的元凶) 二 为什么要用AssetBundle AssetBundle本质上就是一个压缩算法,只不过比起zip等一些压缩多了一些信息,比如平台信息(Ios,android),依赖信息等,既然是压缩,那就很好理解了,AssetBundl...