2014年4月29日

以BMfont打包美術字型的方式


遊戲製作中經常需要使用不同的字型,受限於動態字型能選擇的種類並不多,要增加就需要打包新的字集進引擎,但整個字集動輒數MB,匯入引擎又增加整體的下載容量大小,並不是個很經濟的方式。

先前在工作上遇到這個問題,經由和程式討論得到「可以利用工具將字集中的個別文字拆出,並拼成一張字型貼圖」的作法,所以記錄一下。由於一個字集包含許多符號及冷僻字,其實只要挑出所需的文字就可以,不需將一整個字集匯入,徒增專案容量大小。


字集打包工具BMFont

BMFont(Bitmap font generator)是一套可以將字型集拆開,並選擇個別文字輸出整合成一張貼圖的工具,這麼作可以方便程式調用文字而不需要包入整個字集,輸出的文字也能夠是美術套用過效果的圖型字,讓字型更美觀。

首先開啟BMFont,左側是預設讀取的字型(理論上應該是因為名稱而排名前列的Arial),右側是這個字集中的不同分項,內含各種不同文字或符號。點選灰色區塊會發現文字反白表示被選取,待會輸出的時候就會包含選取的文字。

接著開啟Options→Font settings,在Font的位置設定字集(也可以用Add font file由外部讀入)。



當然,挑選的文字一定是遊戲中會使用到的,所以這部份也算在前置工作中。確認後回到主畫面就可以發現灰色區塊的欄位已經顯示成所挑選的字體,所以接下來就是將所需的字體挑出並輸出成貼圖。

但問題是文字總量不論有無挑選過,一定都有不少數量,同時也不確定想要的文字是在哪一個分項中,一個個找實在很費時。BMFont提供從文字檔或圖檔擷取文字的方式,節省不少時間。

轉碼及簡便的文字挑選功能

使用這個功能需要先將文字打在一般的記事本上,並存成txt檔再轉給BMFont。

而BMFont本身使用的是UTF-8固定編碼,所以準備的文檔也需要遵守這個規定。首先將所需的文字輸入在NotePad++上,由於有編碼問題,用一般windows內建的記事本還需要轉碼,會很麻煩。



確認編碼無誤後輸出.txt檔,並開啟BMFont→Edit→Select chars from file,讀入剛才輸出的文字檔。

順利的話BMFont會告知讀入的字數,同時也會直接選取該文字。在右側的分項選取格中有標示出綠色線段的,就表示該項中有文字被選取,可以確認一下有沒有選到所需的文字。



輸出貼圖

確認無誤後即可輸出貼圖,選擇Options→Export options,在Texture中輸入想要的貼圖大小,這裡要注意的是不要超過4096*4096,因為待會在Unity中設定Atlas的時候會限制在這個大小之下。

不過如果要輸出到這麼大的話,其實匯入字集可能還比較省事,所以還是視情況略微調整比較好。

另外在Bit depth中可以設定8或32位元格式,如果要輸出帶有Alpha的貼圖就得選32,並在下方的Presets選擇。也不要忘了依最後所需的圖片格式,在File format中設定好Texure格式(這邊選的是PNG)。


輸出後會得到兩個檔案,一個是位置的記錄檔,一個則是貼圖本身。


接著將這兩個檔案丟入Unity Asset中並分類放好,開啟NGUI→Font Maker製作Atlas。Type使用預設的Bitmap即可,並設定Font Data為剛才輸出的字型位置檔案,然後附上貼圖以輸出Atlas。


完成Altas後會跟著在Asset中產生對應的Prefab和Material,這兩個都由系統作了預設命名,可以再依歸檔需求調整。


接著在畫面中新增Lable並輸入對應的中文,就可以看到成果。


BMFont還有其它比較細節的選項我沒用過,其實相關的教學在Google上還不少,也有很多寫的更簡潔單純的文章,會再寫一遍純粹是想留個記憶,免得未來不久跟著忘個一乾二淨。

延伸閱讀 

NGUI 插件實現顯示美術字
Unity3D学习网: Unity教程之-UGUI美术字体的制作与使用
HappyCoding:] ChildhoodAndy :详解利用ShoeBox制作位图字体
NGUI 插件實現顯示美術字

沒有留言:

張貼留言

路過留個言

後會無期了,Smash & Magic

從去年發佈後玩到現在的彈珠like手遊『Smash & Magic』在昨天例行更新後發佈了停止營運的公告,這之後一直到今年的10/31關閉為止,就是這款手遊的最後一哩路了。