[專欄精選]TextMeshPro插件

你好,我是元宇宙大智,讓你學(xué)Unity快人幾步。


小新:“UI里面還有一類組件是用TextMeshPro開頭的,這類組件有啥用???”
大智:“TextMeshPro是Unity收購的一個(gè)第三方插件,可以解決文字渲染的很多問題,可以替換UI Text。比如UI Text就沒辦法對(duì)文字加入特效?!?br> 小新:“哇,可以直接對(duì)文字加入動(dòng)態(tài)特效???那就不用美術(shù)同學(xué)辛苦去做了?”
大智:“是的哦”
小新:“那我們今天就來學(xué)習(xí)一下這個(gè)吧!”

TextMesh Pro

TextMesh Pro是Unity中文字渲染的終極解決方案,原本是一個(gè)第三方插件,后被Unity收購后并入U(xiǎn)nity,現(xiàn)在可以免費(fèi)使用。

安裝

對(duì)于Unity2018及以后的版本,可以從菜單欄Window > Package Manager中安裝TextMesh Pro。

Unity2018.2及之后的版本TextMesh Pro包會(huì)被默認(rèn)安裝到工程中,無需手動(dòng)安裝。

對(duì)于Unity2017及之前的版本,可以通過AssetStore(https://assetstore.unity.com/packages/essentials/beta-projects/textmesh-pro-84126)下載導(dǎo)入此插件。

創(chuàng)建

TextMeshPro最基礎(chǔ)的用法就是使用它的Text組件來顯示文本。有兩種使用方法,一種是通過網(wǎng)格MeshRenderer渲染,一種是通過UI系統(tǒng)渲染。

Mesh方式創(chuàng)建方法:Hierarchy的Create菜單(右鍵菜單)> 3D > TextMesh Pro - Text

UI方式創(chuàng)建方法:Hierarchy的Create菜單(右鍵菜單)> UI > TextMesh Pro - Text

第一次創(chuàng)建時(shí),會(huì)彈出一個(gè)提示窗口:

這似乎是您第一次訪問TextMesh Pro,因此我們需要為您的項(xiàng)目添加對(duì)使用TextMesh Pro至關(guān)重要的資源。這些新資源將放置在項(xiàng)目的根目錄中的“TextMesh Pro”文件夾。

點(diǎn)擊下方的按鈕Import TMP Essentials即可。

導(dǎo)入必要資源后,下方的TMP Examples & Extras會(huì)變?yōu)榭牲c(diǎn)擊狀態(tài)。這些資源是可選導(dǎo)入的,可以點(diǎn)擊Import TMP Examples & Extras來導(dǎo)入實(shí)例和額外資源。

Examples&Extras包中包含額外的資源和示例,可以更輕松地發(fā)現(xiàn)和學(xué)習(xí)TextMesh Pro的強(qiáng)大功能。這些額外資源將與TMP基本資源放在同一文件夾中。

TextMesh Pro - Text 和 UGUI - Text 的區(qū)別

TextMesh和UIText的渲染對(duì)比

UGUI的Text使用了一張字體貼圖,Unity把所有需要顯示的字符放到了一張圖集中,字符的形狀是通過像素定義的。當(dāng)我們放大時(shí),像素不夠用就會(huì)出現(xiàn)文字變模糊的情況。

TextMesh Pro的Text使用了不同的技術(shù)來渲染文字,叫做Signed Distance Field(后面簡(jiǎn)稱SDF,對(duì)該技術(shù)感興趣的同學(xué)可以自行搜索一下)。和UGUI類似,這個(gè)技術(shù)同樣需要將字符放到一個(gè)圖集中,但是不使用像素來代表字符的形狀,而使用SDF技術(shù)來生成字符的形狀。使用這種技術(shù)字符在渲染時(shí)不會(huì)因?yàn)榭s放而造成字符模糊的情況,總是能夠準(zhǔn)確的渲染字符的邊緣。

創(chuàng)建字體

TextMesh Pro無法像UGUI Text那樣使用動(dòng)態(tài)字體,因?yàn)門extMesh Pro需要對(duì)字體進(jìn)行預(yù)處理來計(jì)算SDF,這部分計(jì)算非常耗時(shí)。這對(duì)于英文字體來說影響不大,一個(gè)字體文件或一張貼圖包含的信息都很少,但是對(duì)于字符非常多的語言如中文就影響很大。

所以對(duì)于中文環(huán)境建議如下:

  • 對(duì)于游戲中顯示的文字可以使用TextMesh Pro的SDF字體,提高顯示效果和特效處理。
  • 對(duì)于游戲中的輸入框建議使用UGUI自帶輸入框,使用動(dòng)態(tài)字體。

創(chuàng)建SDF字體文件的過程如下:
1、菜單欄打開Window > TextMeshPro > Font Asset Creator

2、在Font Source中選擇你想要?jiǎng)?chuàng)建的字體

3、在Character Set中選擇要生成的字符集

4、其他選項(xiàng)根據(jù)需要進(jìn)行設(shè)置(下面會(huì)詳細(xì)說明每個(gè)屬性的作用)

5、點(diǎn)擊下方的Generate Font Atlas按鈕生成字體

6、生成結(jié)束后記得點(diǎn)擊Save保存**

Font Creator窗口屬性

Font Source 選擇要?jiǎng)?chuàng)建SDF字體的源字體

Font Size 創(chuàng)建字體的字號(hào)的大小。

  • Auto Sizing 建議使用該選項(xiàng)。根據(jù)給定Atlas Resolution(圖集分辨率)來計(jì)算并使用最大字號(hào)。
  • Custom 自定義字號(hào)。

Font Padding 圖集中每個(gè)字符之間的間隔,以便在渲染時(shí)能卻分他們的邊緣。此外padding也用于文字的特效,所以不宜過??;但是也不宜過大,過大會(huì)造成更大的atlas分辨率或者atlas上能承載的字符更少。對(duì)于512*512的圖集,padding為5通常比較合適。

Packing Method 打包方式

  • Fast 可能計(jì)算出不是最大的字號(hào),但是計(jì)算速度會(huì)快一些
  • Optimum 可以計(jì)算出圖集上能承載的最大的字號(hào)
    通常在測(cè)試設(shè)置時(shí)使用Fast,在最終打包時(shí)使用Optimum

Atlas Resolution 使用SFD字體時(shí),更高的分辨率會(huì)產(chǎn)生更精細(xì)的漸變,從而產(chǎn)生更高質(zhì)量的字體。對(duì)于大多數(shù)字體,僅包含所有ASCII字符時(shí),512x512紋理分辨率足夠用。

當(dāng)需要支持?jǐn)?shù)千個(gè)字符時(shí),不得不使用大紋理。但即使在最高分辨率下,也可能無法滿足所有要求。在這種情況下,可以通過創(chuàng)建多個(gè)字體資源來拆分字符。將最常用的字符放在主字體資源中,將其他字符放在后備(fallback)字體資源中。

Character Set 字體文件中的字符不會(huì)自動(dòng)包含在字體資源中。你必須指定你需要的那些。你可以選擇一些預(yù)定義的字符集,也可以自己提供字符列表。

  • ASCII 大小寫字母+數(shù)字+常見符號(hào)
  • Extended ASCII 包含所有的ASCII字符
  • ASCII lowercase 小寫字母+數(shù)字+常見符號(hào)
  • ASCII uppercase 大寫字母+數(shù)字+常見符號(hào)
  • Numbers + Symbols 數(shù)字+常見符號(hào)
  • Custom Range 使用十進(jìn)制來制定字符的編碼范圍,可以使用減號(hào)和英文逗號(hào)來指定范圍,如32-126,161-255
使用自定義字符范圍時(shí),可以直接引用一個(gè)SDF字體,使用這個(gè)字體中的字符集
  • Unicode Range(Hex) 使用16進(jìn)制來制定字符的編碼范圍,可以使用減號(hào)和英文逗號(hào)來指定范圍,如20-7E,A1-FF

  • Custom Characters 自定義字符,直接輸入對(duì)應(yīng)的字符

  • Characters from file 從外部文件中導(dǎo)入字符

注意要包含空格字符,除非確定你不需要它

Font Style 你可以選擇幾種不同的字體樣式。這些設(shè)置僅適用于位圖字體。
你可以通過shader配置SDF字體的樣式,可以選擇粗體、斜體、粗體加斜體和描邊,也可以控制粗體和輪廓的強(qiáng)度。

Font Render Mode 距離場(chǎng)模式創(chuàng)建SDF紋理需要與SDF shader一起使用。字符是在高分辨率下采樣來創(chuàng)建良好的漸變。16x是默認(rèn)值并且足以用于大多數(shù)情況。32x生成較慢但可以讓復(fù)雜或小字符產(chǎn)生更好的質(zhì)量。
其他模式直接將字符渲染為位圖,以便與位圖字體一起使用。Raster模式不使用抗鋸齒,Smooth模式使用抗鋸齒。兩者都有一個(gè)Hinted模式,它將字符像素與紋理像素對(duì)齊以獲得更清晰的結(jié)果。

Get Kerning Pairs? 你可以選擇從字體中提取字距數(shù)據(jù)。此數(shù)據(jù)用于調(diào)整特定字符對(duì)之間的間距,以產(chǎn)生更好的視覺效果。但是請(qǐng)注意很多字體沒有字距數(shù)據(jù)。

總結(jié)

大智:“SDF字體創(chuàng)建完以后就能用于TMP的text了?!?br> 小新:“這個(gè)插件確實(shí)很強(qiáng)大,文字顯示看起來真舒服?!?/p>

今日思考題

大智:“把你的界面里的文字替換成TMP的text看看效果如何吧!”
小新:“好嘞”
大智:“收獲別忘了分享出來!也別忘了分享給你學(xué)Unity的朋友,也許能夠幫到他?!?/p>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容