软件下载地址还有介绍 http://www.angelcode.com/products/bmfont/
using System;
using System.Collections;
using System.Xml;
using UnityEditor;
using UnityEngine;
public class MyBMFontXMLTools : EditorWindow
{
private Font font;
private TextAsset xmlText;
[MenuItem("Window/MyBMFontXMLTools")]
static void AddBMFontWindow()
{
Rect wr = new Rect(0, 0, 500, 500);
MyBMFontXMLTools window = (MyBMFontXMLTools)GetWindowWithRect(typeof(MyBMFontXMLTools), wr, true, "自定义字体");
window.Show();
}
void OnGUI()
{
font = EditorGUILayout.ObjectField("字体", font, typeof(Font), true) as Font;
xmlText = EditorGUILayout.ObjectField("文字XML配置", xmlText, typeof(TextAsset), true) as TextAsset;
if (GUILayout.Button("创建字体", GUILayout.Width(200)))
{
CreateFont();
}
}
private void CreateFont()
{
if (font == null || xmlText == null)
{
Debug.LogError("请设置font和textAsset.");
return;
}
XmlDocument xmlDocument = new XmlDocument();
xmlDocument.LoadXml(xmlText.text);
int totalWidth = Convert.ToInt32(xmlDocument["font"]["common"].Attributes["scaleW"].InnerText);
int totalHeight = Convert.ToInt32(xmlDocument["font"]["common"].Attributes["scaleH"].InnerText);
XmlElement xml = xmlDocument["font"]["chars"];
ArrayList characterInfoList = new ArrayList();
for (int i = 0; i < xml.ChildNodes.Count; ++i)
{
XmlNode node = xml.ChildNodes[i];
if (node.Attributes == null)
{
continue;
}
int index = Convert.ToInt32(node.Attributes["id"].InnerText);
int x = Convert.ToInt32(node.Attributes["x"].InnerText);
int y = Convert.ToInt32(node.Attributes["y"].InnerText);
int width = Convert.ToInt32(node.Attributes["width"].InnerText);
int height = Convert.ToInt32(node.Attributes["height"].InnerText);
int xOffset = Convert.ToInt32(node.Attributes["xoffset"].InnerText);
int yOffset = Convert.ToInt32(node.Attributes["yoffset"].InnerText);
int xAdvance = Convert.ToInt32(node.Attributes["xadvance"].InnerText);
CharacterInfo info = new CharacterInfo();
Rect uv = new Rect();
uv.x = (float)x / totalWidth;
uv.y = (float)(totalHeight - y - height) / totalHeight;
uv.width = (float)width / totalWidth;
uv.height = (float)height / totalHeight;
info.index = index;
info.uvBottomLeft = new Vector2(uv.xMin, uv.yMin);
info.uvBottomRight = new Vector2(uv.xMax, uv.yMin);
info.uvTopLeft = new Vector2(uv.xMin, uv.yMax);
info.uvTopRight = new Vector2(uv.xMax, uv.yMax);
info.minX = xOffset;
info.maxX = xOffset + width;
info.minY = -yOffset - height;
info.maxY = -yOffset;
info.advance = xAdvance;
info.glyphWidth = width;
info.glyphHeight = height;
characterInfoList.Add(info);
}
font.characterInfo = characterInfoList.ToArray(typeof(CharacterInfo)) as CharacterInfo[];
Debug.Log("生成成功.");
}
}
1.像素模糊:把导入Unity 的图片格式设置为Sprite And UI。
2.字体大小不能设置:可以用缩放。
3.不能换行:将字体的Line Spacing 设置为字体的高度即可换行(XML中的height).