【笔记】MacOS/Linux下dump unity3d的资源

极速方法:

https://github.com/HearthSim/UnityPack

这个是一个python的,使用之前呢,先别急着git clonepython setup.py install。首先是为了干净,自觉创建一个virtualenv。然后就是安装dependency,虽然UnityPack会帮我们安装,但我安装的时候一直报错,所以就直接pip install了。

当然在MacOS上至少我的Intel BigSurdecrunch是安装不成功的,即使下载源代码python setup.py install也会报错,这个就麻烦了。所以搜索了一下这个库做了啥,原来是有些Texture2D是压缩了的,需要解压,反正我要摆弄的unity文件里没有要解压的,所以把unitypack/engine/texture.py里的import decrunsh相关的都移动到判断确实是压缩文件的if里,这样就不用安装decrunch了;记得顺带修改setup.cfgdecrunch注释掉。

安装完成,那么我们就可以使用了,unityextract --all -n -o /path/to/output/dir /path/to/unity/asset/file,这中间带个-n就是看看它运行了啥,要输出啥;oh no,WARNING: Texture format not implemented. Skipping 'Erma.png',我要的资源没有解压。那只能再改改代码,把信息print出来了。啊哦,打印出来一个ETC2_RGBA8,再在代码里找找,IMPLEMENTED_FORMATS下面没有这项,所以它会抛出不支持的错误,那这个ETC2咋解?

尝试了各种etcpack的第三方包,没有doc能说从raw block解码的,都是存成了ktx……

我记得windows上有个叫unityRipper的工具好像是可以解码的,找到它的github repo和对应文件:

https://github.com/mafaca/UtinyRipper/blob/master/uTinyRipperGUI/ThirdParty/Texture%20converters/EtcDecoder.cs

啊喂,又要我来人工代码转换……C# -> python,好吧,我写!几个小时后,运行……哈哈,输出一片栅栏格子…继续搜索,发现原来我一直再搜索PIL ETC2 decode,而我用的Pillow可不是PIL……一个pillow etc2 codec,好了,找到了别人写好的integration:

https://github.com/K0lb3/etcpack

git clone + python setup.py install,再import,好了终于可以decode etc2了。开始dump咯~

上一篇:Linux 下安装Apex报错,解决方法


下一篇:CPU缓存一致性协议MESI