福利又來了!
使用NGUI時(shí),游戲中字庫和美術(shù)字庫大家都知道用BMFont工具生成,但是UGUI卻不一樣,UGUI沒有提供導(dǎo)入字庫配置文件的接口,但是它提供新的功能組件【CustomFont】,可引入帶有字庫圖片的材質(zhì)球,并且提供字符信息的輸入,比如ASCII碼,UV信息,字體大小等。那么我們就有希望把美術(shù)字庫用到UGUI上!
在這里嘗試使用BMFont的字庫信息導(dǎo)入到Unity,Unity自帶的圖集裁剪工具也可以生成相關(guān)字庫信息,暫時(shí)還沒研究。
如下圖為CustomFont屬性面板:
1.首先通過BMFont制作字庫配置文件
(如果不知道怎么生成,請百度搜索【unity3d中使用BMFont制作字庫】):
這兩個(gè)文件眼熟吧^_^

2.然后編寫導(dǎo)入配置的腳本。
(因?yàn)闀r(shí)間有限要回家過年了,比較倉促,這里就簡單的測試下。最終寫成在編輯器下運(yùn)行的菜單比較好。)
- usingUnityEngine;
- usingSystem.Collections;
- usingUnityEditor;
- publicclassMyFont:MonoBehaviour
- {
- publicFontm_myFont;
- publicTextAssetm_data;
- privateBMFontmbFont=newBMFont();
- voidStart()
- {
- BMFontReader.Load(mbFont,m_data.name,m_data.bytes);//借用NGUI封裝的讀取類
- CharacterInfo[]characterInfo=newCharacterInfo[mbFont.glyphs.Count];
- for(inti=0;i<mbFont.glyphs.Count;i++)
- {
- BMGlyphbmInfo=mbFont.glyphs[i];
- CharacterInfoinfo=newCharacterInfo();
- info.index=bmInfo.index;
- info.uv.x=(float)bmInfo.x/(float)mbFont.texWidth;
- info.uv.y=1-(float)bmInfo.y/(float)mbFont.texHeight;
- info.uv.width=(float)bmInfo.width/(float)mbFont.texWidth;
- info.uv.height=-1f*(float)bmInfo.height/(float)mbFont.texHeight;
- info.vert.x=(float)bmInfo.offsetX;
- //info.vert.y=(float)bmInfo.offsetY;
- info.vert.y=0f;//自定義字庫UV從下往上,所以這里不需要偏移,填0即可。
- info.vert.width=(float)bmInfo.width;
- info.vert.height=(float)bmInfo.height;
- info.width=(float)bmInfo.advance;
- characterInfo[i]=info;
- }
- m_myFont.characterInfo=characterInfo;
- }
- }
補(bǔ)充一下,下面這幾個(gè)讀取BMFont配置的代碼文件來自NGUI:
3.代碼解釋以及操作
m_myFont是在U3D中右鍵創(chuàng)建的CustomFont
m_data是BMFont導(dǎo)出的.fnt配置文件
通過上面的代碼將配置信息讀出來寫到CustomFont中,然后將創(chuàng)建材質(zhì)球把字庫圖放進(jìn)去,材質(zhì)球拖到CustomFont中和要顯示文字的Text中,這樣就完成了字庫的制作。
4.然后輸入文字測試,效果如下:
OK,效果杠杠的!哇咔咔,收拾東西回家過年...
(轉(zhuǎn)載請注明出處^_^)
愛華網(wǎng)



