总的笔记:https://www.cnblogs.com/guobaoxu/p/12055930.html
目录
正文开始:
汉化过程中需要对MonoBehavior类型的Asset进行修改,主要是修改Text对象的预设文字,也就是正向开发中,在Inspector里面输入的文字,一般是那些固定的、不会变的文字,另外还有对TextMeshPro使用的字体也需要进行MonoBehavior的修改。
一、使用工具:
Unity版本:2018.4.5f1
AssetStudio(地址:https://www.perfare.net/tag/assetstudio)
UABE(地址:https://7daystodie.com/forums/showthread.php?22675-Unity-Assets-Bundle-Extractor)
二、具体操作:
示例DEMO:我用Unity直接做的,什么都没有,只在屏幕上有一个Text,上面写着“在Inspector的文本”
【1】利用AssetStudio进行预览
这个比较简单,把apk用解压工具解压,然后用AssetStudio加载assets\bin\Data文件夹,在第一次查看MonoBehavior类型的Asset的时候,需要加载保存DLL的文件夹,如果是Mono脚本后端,DLL存放在Data/Manager文件夹下,如果是il2cpp脚本后端,需要先用il2cppdumper工具得到DLL(地址:https://www.perfare.net/tag/il2cppdumper)
如果操作正确,那么在AssetStudio的右侧预览中可以看到Text的参数列表,在Inspector中设置的文本也在,如下图所示。右键Show Original File发现该MonoBehaviour在level0文件。我对AssetStudio做了点小修改,直接在页面右下角打印了文件名+PathID,会方便的多。
【2】UABE修改之一:对DUMP文本进行修改
注意,UABE也是需要DLL才能正确得到DUMP文本的,所以如果是il2cpp脚本后端,也需要上一步中导出的DLL。
① 用UABE打开上一步中确定的level0文件,找到刚才的MonoBehaviour
② 点击右侧Export Dump,会弹窗提示,这时候点击“是”,然后给他选择所需要的DLL就可以了,然后就提示保存的位置了,保存好Dump的文本。
注意,不一定能找到所有的DLL的,事实上有很有预设资源也是MonoBehavior类型,他们指向的类可能没有被编译进来(因为不需要),只需要保证要改的MonoBehavior指向的类所在的DLL有就可以了。UABE会自动先在Data\Manager文件夹下找,找不到的才会弹窗要。还有选完DLL会有个小黑窗出来一会会儿。
③ 用Sublime Text打开DUMP文本,也可以用其他的编辑器,但是一定要可以用UTF-8编码,修改完保存。
④ 回到UABE,右侧Import Dump,选择编辑过的文本,点击ok保存
注意,UABE只能另存为,也就是说你不能直接保存回源文件,而是要保存到另一个地方,然后在复制粘贴覆盖回去
⑤ 压回源文件,进行重新签名或者做针对其他安全机制的操作,我的示例APP直接用Unity导的APK,根本不需要任何针对安全机制的操作,改完直接就能安装_(:з」∠)_
操作正确的话结果如下
【3】UABE修改之一:对RAW进行修改
所谓RAW就是直接DUMP出编译后的内容,然后直接对二进制文件进行修改,这种不需要DLL,要通用的多,我在实际应用中遇到过UABE不吃il2cppdumper得到的DLL的情况。
① 还是用UABE打开第一步得到的level0,还是刚才那个MonoBehavior
② 右侧Export RAW,这次就不需要DLL了,然后用可以编辑十六进制的工具打开得到的dat文件,我用的是010 Editor,要修改的字符串在该文件的最后
③ 修改字符串
字符串写入的规则是,
(1) 用UTF-8编码成byte
(2) 写入byte数目,32位整数,小端模式
(3) 按顺序放入byte
(4) 补零,使得当前位置向4byte对齐,也就是当前位置对4byte取余为0
按照这个规则修改上面的字符串,如下
④ 回到UABE,右侧Import RAW
⑤ 保存写回
最终效果如下: