首页 > Unity3D频道 > 【Unity3D研究院之游戏开发】 > Unity3D研究院之加密Assetbundle不占内存(一百零五)
2019
07-02

Unity3D研究院之加密Assetbundle不占内存(一百零五)

AssetBundle.LoadFromMemory基本上是无法在手机上用的,因为要多占一份内存,所以大多Unity项目都不进行资源加密。
Unity2017.2提供了一个新的API AssetBundle.LoadFromStream,通过名字就可以知道它是流加载,那么就不会像AssetBundle.LoadFromMemory那样多占一份很大的内存了。

打包Assetbundle的同时生成加密文件的两个文件分别加载它。

myab.unity3d
encypt_myab.unity3d

这里测试的Assetbundle一共有20M, 使用LZ4压缩格式。

加密和解密我这里随便写个简单的异或 ^ 。后面也可以用一些更好的算法,总之加密可以慢,但是解密一定要快。

界面上放两个Image 分别加载它。

如下图所示,在iPhone7上,基本上加载时间差不多。

Unity3D研究院之加密Assetbundle不占内存(一百零五) - 雨松MOMO程序研究院 - 1
加密以后资源就无法被打开了。
Unity3D研究院之加密Assetbundle不占内存(一百零五) - 雨松MOMO程序研究院 - 2

注意:Android下的streamingAssets目录不能使用,因为android下是放在jar里并不是文件系统。一定要用的话需要拷贝到 Application.persistentDataPath下。

最后编辑:
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
捐 赠写博客不易,如果您想请我喝一杯星巴克的话?就进来看吧!

Unity3D研究院之加密Assetbundle不占内存(一百零五)》有 25 条评论

  1. aaa 说:

    这个方式有实际在项目中使用的吗,lz4在加载的时候,小文件还好,大文件基本是失败的,加载的内容和实际内容都不相符了

  2. mrzhang 说:

    没什么用,光FileStream的生命周期必须比AssetBundle长就说明没办法用这个。

  3. 君莫 说:

    资源太大(大于2G)会报错,大佬有解决办法吗?

  4. 说:

    使用using的方式创建FileStream,如果加载的是LZ4格式的资源,并且大约默认的加载块大小,会导致闪退,建议改改示例代码
    具体闪退的情况可以看我这篇文章https://blog.csdn.net/t163361/article/details/109534650

  5. 周幸福 说:

    没的解密了,根本想不到思路

  6. Hururu 说:

    ab加密后,Android下从streamingassets拷贝到persistentDataPath下再解密 时间应该会很费吧。当单ab包有点大的时候。
    怎么破?

  7. manhelp 说:

    用texturepacker打包的UI图集,构建asserbundle后, 变得很大, 原来只有几百K到变到 几M到十几M不等

  8. Sunning 说:

    真没必要加密

  9. Archer 说:

    问下雨松用LoadFromStream有没有试过Unload(true)的卸载方式,我们用Unload(true)并在卸载的时候才释放FileStream会导致Android报Too many open files的错误,如果提前释放流应该在什么地方释放呢

  10. deviljz 说:

    这种做法会导致序列化文件占用内存变高

  11. 影风飞 说:

    在项目里测试了。。Mono暴涨。 byte[] array引起

    • 雨松MOMO 说:

      默认一个byte[]只有32K 循环使用 不过可以改

      AssetBundle.LoadFromStream(stream, 0, 64);

      • 王刚 说:

        我使用了AssetBundle.LoadFromStream(stream, 0, 64*1024); 在uwa 的分析工具中 比较了前后2次mono 显示 UnityEngine.AssetDbundle.loadFromStream –》selfPersistentBytes 64.0kb -》 selfPersistentcounts 1 抱歉 无法截图

      • 李大卫 说:

        我是小白刚用unity 用打包资源函数打包资源会报告一个音频解析错误,可是我把音频删了还是会有这个错误,该怎么解决呢?

  12. Unity小白 说:

    这种方式加载速度会不会变慢啊

  13. Jaze 说:

    大佬,这种方式加密方式,支持ChunkBase压缩的AB包吗?个人感觉解密后,ChunkBase压缩的优势就不存在了

  14. zhijie lv 说:

    前排感谢大佬!

  15. EDWARD 说:

    那这个加密怎么才能用AS打开?

留下一个回复

你的email不会被公开。