制作UGUI美术字体

作者:new 分类: Unity游戏研究 发布于:2016-3-1 1:28 ė次浏览 6条评论

制作美术字体的教程网上有很多了,我借鉴了网上众多大神的方法, 在此感谢他们。

额外工具:BMFont  下载
先用BMFont编辑美术字,并导出文本信息和图片。

PS:导出图片的大小适合你的美术图片集就好,不要有太大浪费。

导出的文件

有了这两个文件就可以在unity里做美术字体了。

先把这两个文件导入unity工程,然后再创建一个customFont和一个材质球。

然后就是读取数据文件了,这里使用了NGUI里的脚本BMFontReader等

再用脚本读取数据并赋到customFont里,代码

using UnityEngine;
using System.Collections;
using UnityEditor;

public class MyFont : Editor
{
    [MenuItem("MakeFont/Make")]
    static void Make()
    {
        Object[] objs = Selection.objects;
        if (objs.Length != 2)
        {
            Debug.LogError("请选中Custom Font文件与BMFont导出的fnt数据文件");
            return;
        }
        Font m_myFont;
        TextAsset m_data;
        if (objs[0].GetType() == typeof(TextAsset)&&objs[1].GetType()==typeof(Font))
        {
            Debug.Log("text");
            m_data = (TextAsset)objs[0];
            m_myFont = (Font)objs[1];
            Debug.Log("FontName:" + m_myFont.name + "\nData:" + m_data.name);
        }
        else if (objs[1].GetType() == typeof(TextAsset) && objs[0].GetType() == typeof(Font))
        {            
            m_data = (TextAsset)objs[1];
            m_myFont = (Font)objs[0];
            Debug.Log("FontName:"+m_myFont.name+"\nData:"+m_data.name);
        }
        else
        {
            Debug.LogError("请选中Custom Font文件与BMFont导出的fnt数据文件");
            Debug.Log("FontName:null" + "\nData:null");
            return;            
        }

        BMFont mbFont = new BMFont();
        BMFontReader.Load(mbFont, m_data.name, m_data.bytes);  // 借用NGUI封装的读取类
        CharacterInfo[] characterInfo = new CharacterInfo[mbFont.glyphs.Count];
        for (int i = 0; i < mbFont.glyphs.Count; i++)
        {
            BMGlyph bmInfo = mbFont.glyphs[i];
            CharacterInfo info = new CharacterInfo();
            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 =- (float)bmInfo.height / (float)mbFont.texHeight;
            info.vert.x = (float)bmInfo.offsetX;
            info.vert.y = (float)bmInfo.offsetY;           
            info.vert.width = (float)bmInfo.width;
            info.vert.height = (float)bmInfo.height;
            info.width = (float)bmInfo.advance;
            characterInfo[i] = info;
        }
        m_myFont.characterInfo = characterInfo;

        Debug.Log("OK");
    }
}

操作方法:选中customFont文件和导出的数据文件,再点击菜单 MakeFont>>Make,这样就把数据绑定了。

接下来就是把图片丢到材质球上,再把材质球丢到customFont的Default Material里(也可以不丢)。

然后创建一个Text看下效果,

PS:如果字体重叠了,可以把Text的width加大。下面是图片和材质等的设置,可参考。

这个shader是拿的国外一个收费插件的,花了我13刀!可以向我要。

字体文件包括customFont,材质,图片。

本文出自 码农,转载时请注明出处及相应链接。

0

发表评论

电子邮件地址不会被公开。必填项已用*标注


Ɣ回顶部