Unity Assetbundle的加载方式的效率和内存占用
2015-07-14 16:08
671 查看
一,三加载的Assetbundle文件对象22.2MB,unity自带压缩的ab文件
二加载的Assetbundle文件对象52.2MB,未使用unity自带压缩
url/path指定的路径要求是Assetbundle文件,不要对Assetbundle再进行加密压缩的,搞的unity认不出。
以下方法用的Assetbundle都是已经下载到本地SD卡再读取的
一,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的情况了。
二加载的Assetbundle文件对象52.2MB,未使用unity自带压缩
url/path指定的路径要求是Assetbundle文件,不要对Assetbundle再进行加密压缩的,搞的unity认不出。
以下方法用的Assetbundle都是已经下载到本地SD卡再读取的
. | 加载方式 | 开始load到生成Assetbundle时间 | 内存Used Total变化 |
---|---|---|---|
一 | WWW.LoadFromCacheOrDownload(string url, int version) | 0.084s | 51.6M-78.9M-104M |
二 | Assetbundle.CreateFromFile(string path) | 0.012s | 52M-78M-103M |
三 | Assetbndle.CreateFromMemory(byte[] bs) | 2.599s | 51M-108M-195M-217M |
异步方法
开始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的情况了。
相关文章推荐
- (转)Unity3D - 动作动画忽略timeScale
- 【Unity3D】【UGUI】UI Overview
- Unity API
- Unity创建prefab与实例化
- 第一个Unity项目Hello Unity
- Unity 3D之第一个游戏
- 在unity3d中编写你的第一个着色器
- Unity3D第一个项目【控制模型移动】
- Unity5的AssetBundle的一点使用心得
- Unity3D项目程序加密2——对dll进行混淆
- Unity3D项目程序加密1——在Unity3D里使用自己的dll
- 用Unity3D和VuforiaSDK简单做AR应用(实战)
- UnityShader实例08:溶解消融(Dissolve)材质
- 基于unity的飞行模拟设计
- unity 3d实例化位置出现布置?
- Unity3D音频播放器 动态装载组件
- Unity3D 渲染顺序统一解决方案(主要是2D游戏)
- UNITY 5.0.2 发行说明 中文版
- Unity3D之空间转换学习笔记(二):基础数学
- 用Unity3D和VuforiaSDK简单做AR应用(入门)