## 1. UnityFS 的 LZMA 解压实现错误 `Bundle.DecodeLzma` 跳过了 13 字节(5 字节编码属性加 8 字节解压后大小)再把剩余部分交给 `Decoder.Code`。而UnityFS 实际存的是 **5 字节属性**(1 字节 lc/lp/pb,4 字节字典大小),紧跟 LZMA1 原始流。可以参考[UnityPy](https://github.com/K0lb3/UnityPy/blob/417d59522a998fdee9a9c2b29fe35f3063222457/UnityPy/helpers/CompressionHelper.py#L19)中的实现,如果是对比较老的`UnityWeb`格式,LZMA的实现才是带解压后大小的13字节 ## 2. BundleFIle的Header的对齐实现 在Unity 2019.4.x的某些版本中,即使Header.Version == 6,但是Header任然需要对齐。K0lb3/UnityPy#364 这个PR中没有给出具体版本,实际上对于2019.4.x版本中,2019.4.15以后都是这种特例。 ## 3. 其他一些零零碎碎的问题 不太确定该项目准备怎么处理带加密的资产,Unity的cn版本有一种官方自带的加密类型叫做UnityCN,`UnityPy`是直接支持的。另外Tuanjie引擎的格式和Unity海外版本也有不少出入,变动也很多。有些游戏会修改一些资产类型的TypeTree,全都走tpk读取未必能处理,当然如果实际修改了Shader的数据结构,可能也就不适用于shader还原了,可能不在本项目的考虑范畴。 ## 一些建议 总而言之,Unity没有公开过资产的格式,而且版本繁多加上各个厂商魔改,让AI自己从头实现一遍解析费力也不一定能有好效果。 如果你希望让AI修正现在的实现,我觉得参考[UnityPy](https://github.com/K0lb3/UnityPy)的代码实现是一个不错的主意。 或者你可以试试已经有的成熟的Csharp库,比如[AssetsTools.NET](https://github.com/nesrak1/AssetsTools.NET)或者[UnityAsset.NET](https://github.com/AXiX-official/UnityAsset.NET)
Activity