UNITY3D VERSION 5 新版本AB工具 在生产 AB 包的时候会生成 manifest 文件。这些文件有什么联系呢 ?通过测试 我们来一探究竟~

UNITY3D AB新功能

  1. 你可以在 UNITY3D 生成 AB 包的指定目录下,找到一个与 AB 包相同的文件,然后我们加载这个 AB 包便可以获取当前目录下所有的依赖项目。下面的一个案例中,我们从 iOS 当前的目录 AB 包中直接获取到了mapbehaviourmonster_fire_2文件的哈希值 当然也可以获取所有文件的哈希值。这个哈希值我想我会用来校验文件是否被篡改。
  2. 你可以在 AB 生成的 manifest 文件中轻松的获取到 CRC 文件校验码 ,如果你并没有修改当前 AB 包的文件,当前 AB 包再次打包就会跳过当前文件。
  3. 你在当前 AB 的 manifest 文件中可以找到依赖项的完整路径信息,当然你在目录文件 AB 中同样可以找到 只是这个路径不是完整的。

案例

mapbehaviourmonster_fire_2 文件的 manifest 信息如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
ManifestFileVersion: 0
CRC: 3977712109
Hashes:
AssetFileHash:
serializedVersion: 2
Hash: 6ecd135fec1799a7a296d2ec71e12356
TypeTreeHash:
serializedVersion: 2
Hash: 1033bf7ddfd4c6d43e7a6382c0a0a61a
HashAppended: 0
ClassTypes:
- Class: 49
Script: {instanceID: 0}
Assets:
- Assets/Resources/Config/MapBehaviourMonster_Fire_2.txt
Dependencies: []

我们在此处 加载了 iOS(也就是当前目录自动生成的AB包)

1
2
3
4
5
6
7
string path = Path.Combine(Application.streamingAssetsPath, Utility.GetPlatformName());
var bt = File.ReadAllBytes(Path.Combine(path, "iOS"));
AssetBundle ab = AssetBundle.LoadFromMemory(bt);
AssetBundleManifest mainfet = ab.LoadAsset<AssetBundleManifest>("AssetBundleManifest");
Debug.Log(mainfet.GetAssetBundleHash("mapbehaviourmonster_fire_2"));

测试输出结果如下:

1
6ecd135fec1799a7a296d2ec71e12356

更多的内存测试

我也是在晚上搜到这篇文章的他反复做了几个读取释放与资源内存方面的测试感兴趣的可以看看
unity3d 关于AssetBundle的一些处理细节