如何精簡Unity中使用的字體文件
原文鏈接:如何精簡Unity中使用的字體文件 - Blog
在遊戲開發過程中,為了UI界面美觀和顯示效果一致性的考慮,大部分遊戲都會使用動態字體來表現文字。尤其在這個看臉的時代,一種字體已經無法滿足UI同學對美觀的需求,因此我們常常發現若干個小則兩三兆,大則十幾兆的字體文件,這些文件既占包體又占內存。因此,對字體的合理使用和優化已經成為項目中後期優化必不可少的一個步驟。這裡介紹《極無雙》團隊對於字體裁切的思路和方法。
這是侑虎科技第176篇原創文章,感謝作者王亮供稿。歡迎轉發分享,未經作者授權請勿轉載。作者QQ:10096986。如果您有任何獨到的見解或者發現也歡迎聯繫我們,一起探討。(QQ群465082844)
同時,作者也是U Sparkle活動參與者哦,UWA歡迎更多開發朋友加入 U Sparkle開發者計劃,這個舞台有你更精彩!
◆◆◆
問題描述我們《極無雙》項目中使用了兩套字型檔。黑體字體來顯示大部分既定文本、玩家昵稱、對話等。隸書字體來特殊顯示一些標題、武將姓名、稱號、重要對話等需要著重美化顯示的文字。
開始優化前,我們習慣性地在UWA平台上(www.uwa4d.com)提測了一下,在得到的報告中查看:內存管理>> 具體資源信息 >> 字體資源 這一頁。如下圖所示,那時候從內存曲線圖上看到字體資源佔用內存高達12MB。
在此先贊一下UWA測評報告,其在定位問題資源時真是高效。報告很明確地指向了兩個可以優化的方向:1)內存佔用;2)數量峰值。對於數量峰值為2表示每個字體各自有一份冗餘資源。
究其原因如下:
1)遊戲早期登陸階段的場景,以及裡面用到的貼圖、字體等資源往往是不能用AssetBundle進行載入的。而這些貼圖和字體等資源如果又在AssetBundle裡面有依賴,就會在項目中存在相同的兩份;2)內存佔用很好理解,基本上字型檔的磁碟容量等同於內存佔用。
◆◆◆
優化方案1. 字型檔裁切
既然我們接下來要做字體精簡的工作,那麼針對登陸階段/遊戲階段的不同應用場景,可以設計不同的裁切字型檔。最終我們的設計如下圖所示:2. 實際操作
裁切字體的工具很多,我們選用的工具是FontSubsetGUI,簡單夠用。大家只要準備好一個包含你需要字元的txt文件和TTF原文件。運行FontSubsetGUI,選好TTF文件和TXT文件的路徑,【Proceed】生成新TTF文件。
◆◆◆
效果 & 小結精簡之後在UWA上複測,最終字體佔用內存從12MB降低到4.9MB,效果拔群。
通過上述的優化操作,筆者得出結論如下:
- 針對不同字體的應用場景,設計有效精簡的裁切字型檔。
- 需要注意同一個字體資源在AssetBundle內外可能都會有依賴,如果依賴不能避免,那麼就要各自設計裁切字型檔。
文末,再次感謝王亮分享的這個實用給力的技巧。如果您有任何獨到的見解或者發現也歡迎聯繫我們,一起探討。(QQ群465082844)。
還嫌不過癮?直接看看他們的性能數據吧,彪悍性能,可圈可點!
推薦閱讀:
※Unity載入模塊深度解析(Shader)
※Linux性能優化12:網路IO的調度模型
※利用Unity UGUI製作酷炫UI效果(製作篇)
※Wukong 反作弊系統緩存的優化