zoukankan      html  css  js  c++  java
  • Unity手游汉化笔记②:使用UABE替换TTF字体

    总的笔记:https://www.cnblogs.com/guobaoxu/p/12055930.html


    目录

    一、分析

    二、思路

    三、具体实践

    四、总结

    Unity版本:2018.4.5f1

    工具:UABE(地址:https://7daystodie.com/forums/showthread.php?22675-Unity-Assets-Bundle-Extractor

    一、分析

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

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

    二、思路

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

    三、具体实践

    【1】Demo

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

    【2】用UABE导出

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

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

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

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

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

    【4】写回楷体Demo

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

    【5】结果

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

    四、总结

      完整的操作过程是:

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

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

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

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

  • 相关阅读:
    接口
    多态
    封装
    初识继承
    对象的行为
    类、对象、包
    Java方法
    winform 报表的基本使用
    oracle配合C#的使用
    sql面试语句与后台调用js提示语句
  • 原文地址:https://www.cnblogs.com/guobaoxu/p/12060027.html
Copyright © 2011-2022 走看看