美文网首页
UABE 汉化TTF

UABE 汉化TTF

作者: LiuJP | 来源:发表于2019-12-26 12:25 被阅读0次

一、分析

在Unity中,可以看到一个TTF文件在导入后,可以展开成下面这样

image

也就是一个大哥带两个小弟,合理猜测在这个“大哥”的二进制块中会包含指向两个“小弟”的指针

二、思路

首先实验只替换“大哥”,同时要保持两个指向小弟的指针不变,如果可以正常显示就结束,如果不行就把两个“小弟”在一起替换

三、具体实践

【1】Demo

用Unity导出两个Demo,内容上都只有一个Text,但用了不同的字体,目标是把仿宋Demo的字体改成楷体

【2】用UABE导出

在UABE里可以直接看到字体名字的FONT类型资源,先试着DUMP出文本,仿宋的文本DUMP出来之后非常大,足足有300M,用VS Code打开(用记事本肯定打不开的),可以看到内容如下

image

显然两个指针是要保留的,但是其他数据不用动,如果继续用文本,感觉实在太慢了,所以转而用RAW。于是分别DUMP出仿宋Demo和楷体Demo的字体,得到两个dat格式的文件。

【3】对二进制文件的处理

对楷体的dat文件进行处理,替换那两个指针,换成和仿宋的dat一样

根据DUMP文本,首先是字体名字,一个变长的String,然后一个32位数,随后是第一个指针,然后再一个32位数,第二个指针,只需要把楷体的这两个指针改掉即可

image

【4】写回楷体Demo

用UABE打开仿宋Demo的资源文件,Import Raw,选择修改后的楷体dat文件,写回,重新打包

【5】结果

image

仿宋Demo的字体被成功替换成楷体

四、总结

完整的操作过程是:

① 分别得到新字体.dat,旧字体.dat

② 把新字体.dat的两个指针改成和旧字体.dat一致

③ 把新字体.dat写入旧字体的资源文件里去,代替旧字体

麻烦的点:新字体需要专门去建一个Unity工程并编译来得到二进制描述,而且版本要相近,本文demo中的指针是一个32位数表示文件、一个64位数表示对象,但是我记得某个版本有变化,所以最好版本相近甚至相同。

相关文章

网友评论

      本文标题:UABE 汉化TTF

      本文链接:https://www.haomeiwen.com/subject/npdkoctx.html