你好,我是元宇宙大智滞欠,讓你學(xué)Unity快人幾步忙菠。
小新:“UI里面還有一類組件是用TextMeshPro開頭的何鸡,這類組件有啥用啊牛欢?”
大智:“TextMeshPro是Unity收購的一個(gè)第三方插件骡男,可以解決文字渲染的很多問題,可以替換UI Text傍睹。比如UI Text就沒辦法對(duì)文字加入特效隔盛。”
小新:“哇拾稳,可以直接對(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ū)別
UGUI的Text使用了一張字體貼圖锦亦,Unity把所有需要顯示的字符放到了一張圖集中舶替,字符的形狀是通過像素定義的。當(dāng)我們放大時(shí)杠园,像素不夠用就會(huì)出現(xiàn)文字變模糊的情況顾瞪。
TextMesh Pro的Text使用了不同的技術(shù)來渲染文字,叫做Signed Distance Field(后面簡稱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)
通常在測試設(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
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 距離場模式創(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了滔悉◇霸茫”
小新:“這個(gè)插件確實(shí)很強(qiáng)大,文字顯示看起來真舒服氧敢。”
今日思考題
大智:“把你的界面里的文字替換成TMP的text看看效果如何吧询张!”
小新:“好嘞”
大智:“收獲別忘了分享出來孙乖!也別忘了分享給你學(xué)Unity的朋友,也許能夠幫到他份氧∥ò溃”