引用:http://www.cnblogs.com/lancidie/p/6285569.html
在游戲開發(fā)過程中,為了UI界面美觀和顯示效果一致性的考慮,大部分游戲都會使用動態(tài)字體來表現(xiàn)文字。尤其在這個看臉的時代,一種字體已經(jīng)無法滿足UI同學(xué)對美觀的需求,因此我們常常發(fā)現(xiàn)若干個小則兩三兆,大則十幾兆的字體文件,這些文件既占包體又占內(nèi)存。因此,對字體的合理使用和優(yōu)化已經(jīng)成為項目中后期優(yōu)化必不可少的一個步驟。這里介紹《極無雙》團隊對于字體裁切的思路和方法。
◆◆◆
問題描述
我們《極無雙》項目中使用了兩套字庫。黑體字體來顯示大部分既定文本、玩家昵稱、對話等。隸書字體來特殊顯示一些標(biāo)題、武將姓名、稱號、重要對話等需要著重美化顯示的文字。
開始優(yōu)化前,我們習(xí)慣性地在UWA平臺上(www.uwa4d.com)提測了一下,在得到的報告中查看:內(nèi)存管理>> 具體資源信息 >> 字體資源 這一頁。如下圖所示,那時候從內(nèi)存曲線圖上看到字體資源占用內(nèi)存高達12MB。
在此先贊一下UWA測評報告,其在定位問題資源時真是高效。報告很明確地指向了兩個可以優(yōu)化的方向:1)內(nèi)存占用;2)數(shù)量峰值。對于數(shù)量峰值為2表示每個字體各自有一份冗余資源。
究其原因如下:
1)游戲早期登陸階段的場景,以及里面用到的貼圖、字體等資源往往是不能用AssetBundle進行加載的。而這些貼圖和字體等資源如果又在AssetBundle里面有依賴,就會在項目中存在相同的兩份;
2)內(nèi)存占用很好理解,基本上字庫的磁盤容量等同于內(nèi)存占用。
◆◆◆
優(yōu)化方案
1. 字庫裁切
既然我們接下來要做字體精簡的工作,那么針對登陸階段/游戲階段的不同應(yīng)用場景,可以設(shè)計不同的裁切字庫。最終我們的設(shè)計如下圖所示:
2. 實際操作
裁切字體的工具很多,我們選用的工具是FontSubsetGUI,簡單夠用。大家只要準(zhǔn)備好一個包含你需要字符的txt文件和TTF原文件。運行FontSubsetGUI,選好TTF文件和TXT文件的路徑,【Proceed】生成新TTF文件。
◆◆◆
效果 & 小結(jié)
精簡之后在UWA上復(fù)測,最終字體占用內(nèi)存從12MB降低到4.9MB,效果拔群。
通過上述的優(yōu)化操作,筆者得出結(jié)論如下:
針對不同字體的應(yīng)用場景,設(shè)計有效精簡的裁切字庫。
需要注意同一個字體資源在AssetBundle內(nèi)外可能都會有依賴,如果依賴不能避免,那么就要各自設(shè)計裁切字庫。