Unity外掛學習(六) ------ TextMeshPro外掛
小新:“UI裡面還有一類元件是用TextMeshPro開頭的,這類元件有啥用啊?”
大智:“TextMeshPro是Unity收購的一個第三方外掛,可以解決文字渲染的很多問題,可以替換UI Text。比如UI Text就沒辦法對文字加入特效。”
小新:“哇,可以直接對文字加入動態特效啊?那就不用美術同學辛苦去做了?”
大智:“是的哦”
小新:“那我們今天就來學習一下這個吧!”
TextMesh Pro
TextMesh Pro是Unity中文字渲染的終極解決方案,原本是一個第三方外掛,後被Unity收購後併入Unity,現在可以免費使用。
安裝
對於Unity2018及以後的版本,可以從選單欄Window > Package Manager中安裝TextMesh Pro。
Unity2018.2及之後的版本TextMesh Pro包會被預設安裝到工程中,無需手動安裝。
對於Unity2017及之前的版本,可以通過AssetStore(https://assetstore.unity.com/packages/essentials/beta-projects/textmesh-pro-84126)下載匯入此外掛。
建立
TextMeshPro最基礎的用法就是使用它的Text元件來顯示文字。有兩種使用方法,一種是通過網格MeshRenderer渲染,一種是通過UI系統渲染。
Mesh方式建立方法:Hierarchy的Create選單(右鍵選單)> 3D > TextMesh Pro - Text
UI方式建立方法:Hierarchy的Create選單(右鍵選單)> UI > TextMesh Pro - Text
第一次建立時,會彈出一個提示視窗:
這似乎是您第一次訪問TextMesh Pro,因此我們需要為您的專案新增對使用TextMesh Pro至關重要的資源。這些新資源將放置在專案的根目錄中的“TextMesh Pro”資料夾。
點選下方的按鈕Import TMP Essentials即可。
匯入必要資源後,下方的TMP Examples & Extras會變為可點選狀態。這些資源是可選匯入的,可以點選Import TMP Examples & Extras
Examples&Extras包中包含額外的資源和示例,可以更輕鬆地發現和學習TextMesh Pro的強大功能。這些額外資源將與TMP基本資源放在同一資料夾中。
TextMesh Pro - Text 和 UGUI - Text 的區別
TextMesh和UIText的渲染對比
UGUI的Text使用了一張字型貼圖,Unity把所有需要顯示的字元放到了一張圖集中,字元的形狀是通過畫素定義的。當我們放大時,畫素不夠用就會出現文字變模糊的情況。
TextMesh Pro的Text使用了不同的技術來渲染文字,叫做Signed Distance Field(後面簡稱SDF,對該技術感興趣的同學可以自行搜尋一下)。和UGUI類似,這個技術同樣需要將字元放到一個圖集中,但是不使用畫素來代表字元的形狀,而使用SDF技術來生成字元的形狀。使用這種技術字元在渲染時不會因為縮放而造成字元模糊的情況,總是能夠準確的渲染字元的邊緣。
建立字型
TextMesh Pro無法像UGUI Text那樣使用動態字型,因為TextMesh Pro需要對字型進行預處理來計算SDF,這部分計算非常耗時。這對於英文字型來說影響不大,一個字型檔案或一張貼圖包含的資訊都很少,但是對於字元非常多的語言如中文就影響很大。
所以對於中文環境建議如下:
- 對於遊戲中顯示的文字可以使用TextMesh Pro的SDF字型,提高顯示效果和特效處理。
- 對於遊戲中的輸入框建議使用UGUI自帶輸入框,使用動態字型。
建立SDF字型檔案的過程如下:
1、選單欄開啟Window > TextMeshPro > Font Asset Creator
2、在Font Source中選擇你想要建立的字型
3、在Character Set中選擇要生成的字符集
4、其他選項根據需要進行設定(下面會詳細說明每個屬性的作用)
5、點選下方的Generate Font Atlas按鈕生成字型
6、生成結束後記得點選Save儲存**
Font Creator視窗屬性
Font Source 選擇要建立SDF字型的源字型
Font Size 建立字型的字號的大小。
- Auto Sizing 建議使用該選項。根據給定Atlas Resolution(圖集解析度)來計算並使用最大字號。
- Custom 自定義字號。
Font Padding 圖集中每個字元之間的間隔,以便在渲染時能卻分他們的邊緣。此外padding也用於文字的特效,所以不宜過小;但是也不宜過大,過大會造成更大的atlas解析度或者atlas上能承載的字元更少。對於512*512的圖集,padding為5通常比較合適。
Packing Method 打包方式
- Fast 可能計算出不是最大的字號,但是計算速度會快一些
- Optimum 可以計算出圖集上能承載的最大的字號
通常在測試設定時使用Fast,在最終打包時使用Optimum
Atlas Resolution 使用SFD字型時,更高的解析度會產生更精細的漸變,從而產生更高質量的字型。對於大多數字體,僅包含所有ASCII字元時,512x512紋理解析度足夠用。
當需要支援數千個字元時,不得不使用大紋理。但即使在最高解析度下,也可能無法滿足所有要求。在這種情況下,可以通過建立多個字型資源來拆分字元。將最常用的字元放在主字型資源中,將其他字元放在後備(fallback)字型資源中。
Character Set 字型檔案中的字元不會自動包含在字型資源中。你必須指定你需要的那些。你可以選擇一些預定義的字符集,也可以自己提供字元列表。
- ASCII 大小寫字母+數字+常見符號
- Extended ASCII 包含所有的ASCII字元
- ASCII lowercase 小寫字母+數字+常見符號
- ASCII uppercase 大寫字母+數字+常見符號
- Numbers + Symbols 數字+常見符號
- Custom Range 使用十進位制來制定字元的編碼範圍,可以使用減號和英文逗號來指定範圍,如
32-126,161-255
使用自定義字元範圍時,可以直接引用一個SDF字型,使用這個字型中的字符集
-
Unicode Range(Hex) 使用16進位制來制定字元的編碼範圍,可以使用減號和英文逗號來指定範圍,如
20-7E,A1-FF
-
Custom Characters 自定義字元,直接輸入對應的字元
-
Characters from file 從外部檔案中匯入字元
注意要包含空格字元,除非確定你不需要它
Font Style 你可以選擇幾種不同的字型樣式。這些設定僅適用於點陣圖字型。
你可以通過shader配置SDF字型的樣式,可以選擇粗體、斜體、粗體加斜體和描邊,也可以控制粗體和輪廓的強度。
Font Render Mode 距離場模式建立SDF紋理需要與SDF shader一起使用。字元是在高解析度下采樣來建立良好的漸變。16x是預設值並且足以用於大多數情況。32x生成較慢但可以讓複雜或小字元產生更好的質量。
其他模式直接將字元渲染為點陣圖,以便與點陣圖字型一起使用。Raster模式不使用抗鋸齒,Smooth模式使用抗鋸齒。兩者都有一個Hinted模式,它將字元畫素與紋理畫素對齊以獲得更清晰的結果。
Get Kerning Pairs? 你可以選擇從字型中提取字距資料。此資料用於調整特定字元對之間的間距,以產生更好的視覺效果。但是請注意很多字型沒有字距資料。
總結
大智:“SDF字型建立完以後就能用於TMP的text了。”
小新:“這個外掛確實很強大,文字顯示看起來真舒服。”
今日思考題
大智:“把你的介面裡的文字替換成TMP的text看看效果如何吧!”
小新:“好嘞”
大智:“收穫別忘了分享出來!也別忘了分享給你學Unity的朋友,也許能夠幫到他。”
作者:鄭洪智_技術探路者
連結:https://www.jianshu.com/p/d89bcd77f468
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯絡作者獲得授權並註明出處。