您的位置:首页 > 移动开发 > Unity3D

Unity Assetbundle的加载方式的效率和内存占用

2015-07-14 16:08 671 查看
一,三加载的Assetbundle文件对象22.2MB,unity自带压缩的ab文件

二加载的Assetbundle文件对象52.2MB,未使用unity自带压缩

url/path指定的路径要求是Assetbundle文件,不要对Assetbundle再进行加密压缩的,搞的unity认不出。

以下方法用的Assetbundle都是已经下载到本地SD卡再读取的

.加载方式开始load到生成Assetbundle时间内存Used Total变化
WWW.LoadFromCacheOrDownload(string url, int version)0.084s51.6M-78.9M-104M
Assetbundle.CreateFromFile(string path)0.012s52M-78M-103M
Assetbndle.CreateFromMemory(byte[] bs)2.599s51M-108M-195M-217M
一,WWW.LoadFromCacheOrDownload(string url, Int version):

异步方法

开始load到生成Assetbundle时间:0.084s

内存Used Total变化:51.6M-78.9M-104M

这个方法简单方便,效率不错,而且加载时占内存少,我没明白它把缓存存到哪个路径了。有人 说使用这个方法更新有时出现失败的情况,但我没遇到过。对于有资源更新需求的建议还是自己定义更新版本号。对于这种让人封装得比较“完美”的方法,我觉得并非很多人都喜欢。

二,Assetbundle.CreateFromFile(string path)

非异步方法,

unity官方文档上说最快的加载Assetbundle方式。

从指定路径开始load到生成Assetbundle时间:0.012s

内存Used Total变化:52M-78M-103M

注意:这里的url指定的Assetbundle要求是没有压缩过的,此方法也只能加载未压缩过的,就是打包ab时选择不压缩。

这个方法加载效率高,内存占用低,推荐使用,只是使用未经过unity压缩的Assetbundle,但下载或打包进StreammingAssets时我们可以自己压缩。虽然如此,但最后还是得解压到手机SD卡,占用一定的手机SD卡空间。

三,Assetbndle.CreateFromMemory(byte[] bs)

传入unity自身压缩过的Assetbundle文件的字节,

从指定路径开始load到生成Assetbundle时间:2.599s,(太大,直接停在这一帧了)

内存Used Total变化:51M-108M-195M-217M

这个方法先把Assetbundle文件的字节加载进内存,再从这些字节生成Assetbundle,最后导致加载时间漫漫,内存使用飙升。他的好处是可以对字节进行处理,就是加密,这样就可以对手机SD卡中的Assetbundle文件进行加密也能够使用了。

以上的内存最高值只是某一时刻的

当然,引用完Assetbundle后要使用Unload进行释放。

如果觉得调用Unload(false)没什么效果,试试:

引用至jesse_luzexi的博客:

这是U3D没有处理好的一个环节。在WWW加载资源完毕后,对资源进行instantiate后,对其资源进行unload,这时问题就发生

了,instantiate处理渲染需要一定的时间,虽然很短,但也是需要1,2帧的时间。此时进行unload会对资源渲染造成影响,以至于没有贴图或

者等等问题发生,等待个0.5秒到1秒之后再进行Unload。这样就不会出现instantiate渲染中就运行unload的情况了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: