【AddHashToBundleNameTask】
这个Task的作用很明确,给Bundle的名字附加一个Hash值:
- 根据bundle所包含的asset计算出来一个hash值添加在原来Bundle的末尾
- 替换了BundleBuildContent.BundleLayout和aa.bundleToAssetGroup中的key
有两个问题,为什么要计算Hash值,以及如何计算。
Hash有两个作用:一是数据压缩;二是数据加密。这里是为了给Bundle的名字加密。
Hash值计算流程:
- 从BundleBuildContent.BundleLayout中得到bundleName和及该Bundle包含的Asset
- SBP有一个配置界面,可以配置某个Bundle的Name和哪些Asset同属于某个Bundle
- 计算该asset的依赖关系得到一个Hash128
-
AssetDatabase.GetAssetDependencyHash来计算
-
如果有缓存,可以直接从缓存中读取
-
-
用所有Asset的Hash128算出来一个RawHash
-
HashingMethods.Calculate(hashes.ToArray()
-
Hash计算算法:
默认的Hash算法是MD5,用的C#的MD5CryptoServiceProvider
另一种是SpookyHash,一种比较新的Hash算法,Unity按照算法原理自己实现的
Hash算法接受的输入是byte[],通常我们需要将输入数据转为byte[],转化的实现看HashingMethods.GetRawBytes。
这里主要是因为要根据依赖计算Hash值,所以才放在