如何精簡Unity中使用的字體文件


在游戲開發過程中,為了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,效果拔群。
請輸入圖片描述

通過上述的優化操作,筆者得出結論如下:

    1. 針對不同字體的應用場景,設計有效精簡的裁切字庫。
    2. 需要注意同一個字體資源在AssetBundle內外可能都會有依賴,如果依賴不能避免,那么就要各自設計裁切字庫。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM