源战役客户端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

150 lines
5.5 KiB

using UnityEngine;
using System.Collections;
using UnityEditor;
public class MyFont : Editor
{
[MenuItem("Tools/MakeFont/导出BMFont " + "%#e")]
static void CreateBmFont()
{
Object[] objs = Selection.objects;
if (objs.Length != 1)
{
Debug.LogError("请选中BMFont导出的fnt数据文件");
return;
}
if (objs[0].GetType() != typeof(TextAsset))
{
Debug.LogError("请选中BMFont导出的fnt数据文件");
return;
}
var item = objs[0];
string AssetFile = AssetDatabase.GetAssetPath(item);
string PathNameNotExt = AssetFile.Remove(AssetFile.LastIndexOf('.'));
string FileNameNotExt = PathNameNotExt.Remove(0, PathNameNotExt.LastIndexOf('/') + 1);
string TextPathName = PathNameNotExt + ".txt";
string MatPathName = PathNameNotExt + ".mat";
string FontPathName = PathNameNotExt + ".fontsettings";
string PngName = PathNameNotExt + "_0.png";
//Texture tex = Resources.Load(PngName) as Texture;
Texture tex = (Texture)AssetDatabase.LoadAssetAtPath(PngName, typeof(Texture));
if (!tex)
{
Debug.LogError("不存在 "+ PngName+" 文件");
return;
}
Material mat = (Material)AssetDatabase.LoadAssetAtPath(MatPathName, typeof(Material));
if (mat == null)
{
//创建材质球
mat = new Material(Shader.Find("Legacy Shaders/Transparent/Diffuse"));
mat.SetTexture("_MainTex", tex);
AssetDatabase.CreateAsset(mat, MatPathName);
}
else
{
mat.shader = Shader.Find("Legacy Shaders/Transparent/Diffuse");
mat.SetTexture("_MainTex", tex);
}
Font font = (Font)AssetDatabase.LoadAssetAtPath(FontPathName, typeof(Font));
if (font == null)
{
font = new Font(FileNameNotExt);
AssetDatabase.CreateAsset(font, FontPathName);
}
TextAsset m_data = (TextAsset)objs[0];
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;
}
font.characterInfo = characterInfo;
font.material = mat;
// 通知编辑器有资源被修改了
EditorUtility.SetDirty(font);
// 保存所有修改
AssetDatabase.SaveAssets();
AssetDatabase.Refresh();
Debug.Log("OK");
//ShowNotification(new GUIContent("OK"));
}
[MenuItem("Tools/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");
}
}