UnityWebGL 场景资源、预制体资源、分配内存大小、压缩格式与打包的包体大小关系(实测)。
作者:互联网
前言
1,网上的信息大多比较零散,我只知道这些内容是有关系的,并不清楚具体的差别大小。所以我就用最笨的方法进行了很多次打包,把各种情况做一个对比,一次搞清楚。那样就能知道到底从哪个方向优化比较好。
2,因为打包出的webgl文件中,主要数据是与buid文件夹中的“项目.data..unityweb“的文件相关的,所以以下主要对比此文件的大小变化
3,本文主要对这两个地方进行改动
一,空场景的数据
场景无资源
无文件资源
内存大小 | 压缩方式 | .unitywebgl大小 |
256 | Gzip | 660k |
二,导入模型,引用预制体,放在Resources中的几种打包数据
导入一个20M的模型,打包
内存大小 | 压缩方式 | .unitywebgl大小 |
256 | Gzip | 660kb |
没变化,那我在新建一个脚本,引用一下该预制体
然后,文件大小增加了2113k
好吧我证明了,unity只会打包有引用的东西。。
在进一步测试,把预制体放进Resources文件夹呢。
取消代码引用,然后单纯的把预制体放在Resources文件夹,打包
在Resources中哪怕不引用,都会一块打包出来,而且比在别的文件夹还要大一些
三,改变内存大小,和压缩方式
首先改变内容大小,256*4,看一看分配内存对文件大小有木有关系
以下为引用一个预制体
内存大小 | 压缩方式 | .unitywebgl大小 |
1024 | Gzip | 2773kb |
并没有变化,接下来把内存大小改成256,压缩方式改变一下
内存大小 | 压缩方式 | .unitywebgl大小 |
256 | Brotli | 1846kb |
又压缩900kb,而模型也就2m左右,又减少了接近一半的大小。
代价就是,打包时长延长。
这个地方需要注意的是,这个格式的打包优化比例,对脚本,图片资源,以及其他资源是不同的。并不全是接近一半
四,场景资源与隐藏的场景资源
脚本删除后,实例一个预制体到场景,打包。
内存大小 | 压缩方式 | .unitywebgl大小 |
256 | Gzip | 2773kb |
场景中存放的模型会被打包出来。
然后,把场景中该物体隐藏,打包。
隐藏也是不行滴,所以最好的办法就是不要放任何东西。
五,Resources存在预制体且场景中有该预制体实例。
内存大小 | 压缩方式 | .unitywebgl大小 |
256 | Gzip | 2901kb |
让人欣慰的是,还好不是1+1=2的关系,单个Resources预制体2857kb,实例一个2901kb。
那么不如实例两个?
六,打包成AssetsBundle文件
把预制体放在Resources外边,打包成AssetsBundle看有什么惊喜。
这个文件大小无变化
然后资源打包成
总计660+963=1723kb.
七,结语
最优解已经出来了,场景不要放资源,打包成ab包加载对象,这就是最小包体的优化方向。
当然这是主要的优化,只于其它的细节,比如只打包一个场景出去,剩余的场景用ab包加载,这些细节的优化还是很多的,就不一一列举了。。。
标签:场景,UnityWebGL,Resources,内存大小,分配内存,包体,预制,256,打包 来源: https://blog.csdn.net/qq_41886896/article/details/93199543