AssetBundle加密

​新版本里针对AssetBundle格式简单并且容易破解的问题,推出了加密功能,目前加密需要AssetBundle为LZ4压缩格式,其它格式的加密后续推出。这里说一下常用的压缩方式及对应的压缩算法。

 

首先我们打包用的API:.BuildPipeline.BuildAssetBundles(BuildPath,BuildAssetBundleOptions, BuildTarget); 压缩方式在第二个参数进行设置,是一个枚举值

常用的三种压缩方式及区别:

1.BuildAssetBundleOptions.None: 使用LZMA算法压缩,压缩的包更小,但是加载时间更长。使用之前需要整体解压。一旦被解压,这个包会使用LZ4算法重新压缩。使用资源的时候不需要整体解压。在下载的时候可以使用LZMA算法,一旦它被下载了之后,它会使用LZ4算法保存到本地上。

2.BuildAssetBundleOptions.UncompressedAssetBundle: 不压缩,包大,加载快。

3.BuildAssetBundleOptions.ChunkBasedCompression: 使用LZ4算法压缩,压缩率没有LZMA高,但是我们可以加载指定资源而不需要解压全部。

使用LZ4算法压缩,可以获得可以跟不压缩相媲美的加载速度,而且比不压缩文件要小。目前AB包加密需要LZ4压缩格式,也就是上面提到的ChunkBasedCompression方式。

加密方法(官方有相应的加密文档):

1.构建AB包时,先指定本次build所使用的加密秘钥,密钥长度为16为字符(128bit):

BuildPipeline.SetAssetBundleEncryptKey("0123456789abcdef");

然后指定BuildAssetBundleOptions 包含:ChunkBasedCompression和EnableProtection:

BuildPipeline.BuildAssetBundles(assetbundleBuildPath, BuildAssetBundleOptions.ChunkBasedCompression | BuildAssetBundleOptions.EnableProtection, EditorUserBuildSettings.activeBuildTarget);

通过指定密钥为null来清除秘钥:BuildPipeline.SetAssetBundleEncryptKey(null); 

2.加载AssetBundle时,先指定本次加载所使用的解密秘钥:AssetBundle.SetAssetBundleDecryptKey(rightUserKey);然后加载AssetBundle,常用的加载方式:

1).AssetBundle.LoadFromFile

2).AssetBundle.LoadFromMemory

3).WWW.LoadFromCacheOrDownload   不过现在新版本里www类已经过时。

4).UnityWebRequest

最后也是通过指定密钥为null来清除秘钥:BuildPipeline.SetAssetBundleEncryptKey(null); 

欢迎关注公众号 “当代野生程序猿”。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CoderZ1010

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值