极速方法:
https://github.com/HearthSim/UnityPack
这个是一个python的,使用之前呢,先别急着git clone
和python setup.py install
。首先是为了干净,自觉创建一个virtualenv
。然后就是安装dependency,虽然UnityPack
会帮我们安装,但我安装的时候一直报错,所以就直接pip install
了。
当然在MacOS
上至少我的Intel BigSur
上decrunch
是安装不成功的,即使下载源代码python setup.py install
也会报错,这个就麻烦了。所以搜索了一下这个库做了啥,原来是有些Texture2D是压缩了的,需要解压,反正我要摆弄的unity文件里没有要解压的,所以把unitypack/engine/texture.py
里的import decrunsh
相关的都移动到判断确实是压缩文件的if
里,这样就不用安装decrunch
了;记得顺带修改setup.cfg
把decrunch
注释掉。
安装完成,那么我们就可以使用了,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咯~