1. 程式人生 > >Unity TextMesh Pro 文字元件之字型圖集生成工具

Unity TextMesh Pro 文字元件之字型圖集生成工具

原因

Unity 推薦使用 TextMesh Pro 來代替內建的現有文字元件如 Text Mesh 及 UI Text,因為 TextMesh Pro 可以渲染出非常清晰的文字。在使用過程中發現,發現有以下問題:

  1. TextMesh Pro 需要先生成一張靜態字型圖集,每當靜態文字增加時,都需要開啟自帶的生成工具,一個引數一個引數的設定,非常麻煩,也不便於其他人員使用。

  2. 每一個字型資產都會生成一個圖集,這對於相同字型,但是不同樣式的字型資產就會冗餘字型圖集。

  3. 一個字型裡通常不會包含所有的字元,當遇到缺失字元時,就會空缺顯示,如果採用回撥字型方式,又會增加 Draw Call,最好是可以採用備用字型生成在同一個圖集裡。

  4. 某些字元在首位字型裡並不美觀,需要可以指定使用某個備用字型來渲染。

目標

這個工具要解決這些問題,達成以下目標:

  1. 一鍵式生成預設字型圖集

  2. 相同字型複用同一個圖集

  3. 字元缺失的採用備用字型

  4. 指定字元只採用某個字型

示意圖

原始碼

https://github.com/akof1314/UnityTMProFontCustomizedCreater

細節說明

每次生成字型圖集時,都要通過 Font Asset Creator 來設定,繁瑣且耗時。想要自動化的生成,就需要借鑑這個工具的實現,通過反射 【TextMeshPro-5.6-Editor.dll】可以看到 TMPro_FontAssetCreatorWindow 類的實現,但更好的方式是通過 Unity 2018 來安裝 TextMesh Pro 元件,就可以在包目錄下(C:\Users\Administrator\AppData\Local\Unity\cache\packages\

packages.unity.com\[email protected]\Scripts\Editor)直接找到 【TMPro_FontAssetCreatorWindow.cs】原始碼檔案。實現一個簡單的介面,一鍵式操作,這樣其他人員也可以自行使用。

另外,相同的字型資產會歸位一類,在生成字型圖集的時候,只會生成一張,如下圖所示:

對於缺失的字元,準備多個備用字型,最好字型樣式比較相近。在生成完字型圖集後,檢查是否有【Missing Characters】,若有,則將這些缺失字元進入備用字型渲染,渲染完畢再拷貝到主字型圖集,為了方便區別,拷貝到圖集的右上角,如下圖所示:

下面是對比效果:


使用 MFYANSONG.OTF 字型單獨渲染的效果


使用 MFYANSONG.OTF 字型渲染 + 回撥 SYHT.OTF 字型渲染缺失字的效果


使用 MFYANSONG.OTF 字型 + 備用 FZYaSong-B.TTF 字型 + 備用 SYHT.OTF 字型渲染的效果