Unity中字體名對依賴關係的影響
原文鏈接:Unity中字體名對依賴關係的影響 - UWA Blog
【求知探新】在UWA團隊做性能優化的過程中,常常會遇到一些未知的問題,在這裡我們將分享UWA研究這些問題的完整過程。當然需要說明的是,一個好的問題沒有標準的答案,在此也歡迎大家來積極拍磚!
今天分享的內容,來自我們對UWA問答社區中《求助有關字體依賴的問題》一帖的研究。
一、問題描述
兩個沒有相關性的字體,在Unity里導入的時候,會產生依賴關係。
二、問題復現
研發團隊做了一個測試Demo,導入了兩個字體「PKCommonFont.ttf」和「Normal.ttf」。並在測試之前確認過這兩個字體資源,無論是從字體本身,還是Unity裡面的Font Name等地方,都沒有看到相關性,但是卻能通過AssetDatabase.GetDependencies(ttfPath)方法找到兩者之間的依賴關係。在實際載入的時候,載入PKCommonFont時,也會載入Normal字體。
三、問題分析
在我們研究該問題的過程中,我們慢慢發現,當字體為Dynamic類型時,其會根據Font Names建立關聯,此處的Font Names不是指字體文件的文件名,而是指字體內部名(TrueTypeFontImporter.fontTTFName)。示例中的 「Normal」 和 「PKCommonFont」 都只是文件名,而其字體內部名都是「Source Han Sans CN」;而當出現相同字體內部名的字體文件時,Editor會自動在其之間建立關聯(後出現在project中的字體會關聯先出現的字體)。這也就是為什麼示例中兩個完全不同字體會產生關聯的原因。同時,為了驗證這一問題,我們也嘗試將兩個字體的FontName進行修改,讓其不再相同,果然,這兩種字體的依賴關係就消失了。
四、解決方案
1、較為合理的解除關聯的方法:
重命名字體內部名,使獲取的TrueTypeFontImporter.fontTTFName不相同即可。2、較為方便的解除關聯的方法:
修改ttf對應的meta文件,將其中的fallbackFontReferences:[]修改為以下是測試過程:
方法一:用FontCreator修改FontName
使用了FontCreator(9.1)修改FontName,步驟如下:1)用FontCreator打開PKCommonFont.ttf文件後,通過【字體】【屬性】打開屬性面板。2)切換到【擴展】頁簽,修改【字體族】為「PKCommonFont」。3)導出:【文件】【導出字體為】選擇TrueType字體,字體名稱選擇【版本重新生成】,導出PKCommonFont2.ttf。
下圖為修改前後兩個字體的meta文件對比,左為修改前,右為修改後。
下圖為修改後的運行結果,可以看到PKCommonFont2.ttf不再依賴Normal.ttf。
方法二:修改有依賴問題的ttf的meta文件
下圖為meta文件的修改前後對比,左為修改後,右為修改前。下圖為修改後的運行結果,可以看到PKCommonFont.ttf不再依賴Normal.ttf。
五、結論
當明確Unity使用的是字體資源的內部名後,字體間產生關聯的原因也就水落石出。該問題的困惑源自字體資源文件名與字體內部名不一致,因而建議研發團隊在為字體資源文件命名時盡量與字體內部名稱一一對應,來避免在使用過程中受到文件名干擾。
至此,該問題已經得到了解決。該問題來自於問答社區:https://answer.uwa4d.com/question/5a697bf17daacf4c7ff04928,如您對該問題仍有疑問,可以轉至社區進行進一步交流。
我們歡迎大家在UWA問答社區(answer.uwa4d.com)積極提交研發過程中遇到的問題。也許隨著時間的流逝,科技的進步,答案將變得廉價,但問題會變得更有價值,因為提問和研究將比回答更有力量。
推薦閱讀: