TextMeshPro
TextMeshPro 是 Unity 的終極文本解決方案。它是 Unity 的 UI 文本和舊版文本網格的完美替代品。
TextMeshPro(也稱為 TMP)功能強大且易于使用,它使用高級文本渲染技術以及一組自定義著色器;提供顯著的視覺質量改進,同時在文本樣式和紋理方面為用戶提供難以置信的靈活性。
TextMeshPro 提供了對文本格式和布局的改進控制,具有字符、單詞、行和段落間距、字距調整、對齊文本、鏈接、超過 30 個可用的富文本標簽、支持多字體和精靈、自定義樣式等功能。
很好的表現(xiàn);很好的績效。由于 TextMeshPro 創(chuàng)建的幾何圖形每個字符使用兩個三角形,就像 Unity 的文本組件一樣,因此這種改進的視覺質量和靈活性沒有額外的性能成本。
1.工作流
由美術和資源策劃決定需要使用的字體或向第三方直接購買字體,提供字體文件(ttf格式為優(yōu))。僅需提供原字體,無需提供黑體等特殊效果字體;字體總數(shù)不應過多。直接使用外部字體時需注意版權問題。
ttf文件提供給客戶端程序,程序將ttf文件轉換為項目中用的SDF文件。
資源策劃根據各功能實際需求,在資源上配置對應字體的SDF文件。
2.字體導入
由程序負責新字體的導入,推薦使用字體查看和編輯軟件fontforge和字體子集生成軟件fontmin。
1)字體分類
在多語言項目中,我們使用TMP的fallbackList機制來配置字圖查找的優(yōu)先級:
我們現(xiàn)在會把項目中可能使用的所有字體分為:各語言字體(中日英韓德法..)、符號字體(僅存在一個)和特殊字體。
在這個前提下,我們希望各個字庫間盡可能無重復(防止不同語言下看同一個字的樣式不同),所以我們需要將源ttf文件進行子集篩選,讓它僅存在對應語言的字,或僅存在符號字。
?
2)生成字庫
根據對應語言的UTF-8編碼段,僅篩選出需要的字符,生成子集ttf文件;在Window/TextMeshPro/FontAssetCreator工具中,使用對應ttf文件生成合適大小的字圖;最終保存為asset文件。
可能需要關注的配置內容:
SourceFontFile:選擇對應的字體ttf文件。
SamplingPointSize:PointSize可以代表字體清晰度,一般PointSize>25才清晰。為保證描邊等材質效果一致,建議所有字體的PointSize一致(本項目設定為30);若項目無通用字體材質的需求也可直接AutoSizing。
AtlasResolution:選擇保證PointSize合適的最小大小。這與運行中內存占用有關。
CharacterSequence:填寫對應UTF-8編碼段。
RenderMode:推薦使用SDFAA_HINTED。
GenerateFontAtlas:點擊該按鈕生成字圖。生成后下方會提示字圖對應的PointSize(衡量單字所占像素數(shù),若過小則會產生失真),以及缺字等提示信息。
各語言UTF-8編碼段待后續(xù)補充。
?
3)確定fallbackList
創(chuàng)建一個僅包含默認"_"字符的預設字體asset,下劃線的存在是因為TMP需要使用下劃線來渲染underline配置的字體。
向資源策劃確認該字體應屬于那一套字體預設,將其加入對應預設字體asset的fallbackList中,順序按需確定。實際資源配置中僅使用帶有預設fallbackList的預設字體asset。
3.字體配置
字體配置由資源策劃進行。
1)選擇字體
在文本組件中TMP腳本上,選擇所需的FontAsset。
?
2)字體效果實現(xiàn)(加粗等)
加粗、斜體等直接在TMP組件中勾選即可;描邊等復雜效果實現(xiàn)如下。
首先選中對應字體的材質球(保存在Resources/UI/Font目錄下):
為材質球創(chuàng)建新的預設:
為新的材質預設命名,本項目中命名必須以“TMPCommonMat”開頭:
在inspector中可以編輯具體材質內容:
在TMP組件中選擇對應預設即可:
?
?
4.圖文混排
1) 提交圖片資源
圖片資源提交到?Assets\Resources\UI\HyperStyle\自定義文件夾名\?下,需要打圖集。
同一圖集內的圖片大小應一致,以便調整適配。若大小不一致,則圖集中pivot必須為bottomLeft。
2) 生成emoji字體
選中圖集atlas文件,在右鍵菜單中選擇?Create -> TextMeshPro -> Sprite Asset?,并將生成的?[圖集名.asset]?文件移至?Assets\Resources\TMPRes\Resources\SpriteAssets?目錄下。
選中asset文件,在Inspector窗口中打開?Sprite Glyph Table?,可調整各個圖片的偏移、以及全局偏移(?Global Offsets & Scale)。
3) 使用emoji字體
在[TMPSettings.asset]?文件中的?DefaultSpriteAsset -> DefaultSpriteAsset?配置默認emoji字體
配置文本為"測試字體<sprite="圖集名" name="圖片名">測試字體",即可看到圖文混排結果。
例:aaaa<sprite="Summon_tp1" name="Btn_Main_ZhaoHuan">bbbb
?
5.缺字和字體錯誤等問題的修復
缺字時,由程序向對應字體文件(ttf)中新增字形,再重新生成asset即可;更方便的做法是專門創(chuàng)建一個用于補字的兜底字庫,將它放在fallbackList的最后,其對應ttf字體包含幾乎所有字形,其CharacterSequence僅按需添加。
字體錯誤時,多數(shù)原因是fallbackList中的字庫間存在重復,導致索引到了其他字庫中的字。通過運行中的SubMeshUI名稱檢查其字庫來源,處理重復字即可。
6.一些常用額外內容的配置
1) 斜體、粗體等細節(jié)配置
在字體asset文件的Font Weights中可以配置。
2)默認換行、默認接受射線的初始化配置
在TMPSettings文件中,勾選對應項。(WordWrapping、EnableRaycastTarget)文章來源:http://www.zghlxwxcb.cn/news/detail-402666.html
?)...待補充文章來源地址http://www.zghlxwxcb.cn/news/detail-402666.html
到了這里,關于Unity - TextMeshPro的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!