介绍

Unity AssetBundle 分割与合并 - 狂飙 中介绍了一种分割后合并 AssetBundle 的方法,但在实际使用时存在启动时合并操作过于耗时的问题,即便后续优化为只合并必要文件,剩余文件在线程中合并,也还是会有五秒左右的耗时。

其实换个思路,AssetBundle.LoadFromFile 支持 offset 参数,因此可以将不同的 AssetBundle 合并到一个地方,在读取的时候增加对应的 offset 即可。

打包

与上述文章类似,可以按照随机顺序多个不同的 AssetBundle 合并为一个文件,并记录下相关信息。

加载

读取打包时产生的信息文件,生成运行时需要的字典,然后在读取 AssetBundle 前查表找到对应的 offset 值,传递给 AssetBundle.LoadFromFile

结果

这种单纯合并的方法要比分割后再合并的方法好:去除了无用的运行时文件 IO 操作,直接去除了无用的合并文件耗时;大幅减少了文件数量。

在 iOS 设备上实际测试时读取文件没有性能下降,一切与未合并时一致。