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位數表示對象,但是我記得某個版本有變化,所以最好版本相近甚至相同。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM