IndieGame/client/Assets/Plugins/zbitmap/zbitmapfont/Editor/BitmapFontGenerater.cs
2024-10-22 17:38:59 +08:00

169 lines
6.2 KiB
C#

//#if UNITY_4 || UNITY_5_1
//#pragma warning disable 0618
//#endif
//#if UNITY_EDITOR
//using UnityEngine;
//using System.IO;
//using System.Xml;
//using UnityEditor;
//public static class BitmapFontGenerater
//{
// static string DEFAULT_SHADER = "Unlit/Transparent";
// [MenuItem("Assets/Create/Bitmap Font")]
// public static void GenerateBitmapFont()
// {
// Object[] textAssets = Selection.GetFiltered(typeof(TextAsset), SelectionMode.DeepAssets);
// Object[] textures = Selection.GetFiltered(typeof(Texture2D), SelectionMode.DeepAssets);
// if (textAssets.Length < 1)
// {
// Debug.LogError("BitmapFont Create Error -- XML File is not Selected. (XMLファイルを選択してください)");
// return;
// }
// if (textures.Length < 1)
// {
// Debug.LogError("BitmapFont Create Error -- Texture File is not selected. (フォントテクスチャを選択してください)");
// return;
// }
// Generate((TextAsset)textAssets[0], (Texture2D)textures[0]);
// }
// static void Generate(TextAsset textAsset, Texture2D texture)
// {
// XmlDocument xml = new XmlDocument();
// xml.LoadXml(textAsset.text);
// XmlNode common = xml.GetElementsByTagName("common")[0];
// XmlNodeList chars = xml.GetElementsByTagName("chars")[0].ChildNodes;
// CharacterInfo[] charInfos = new CharacterInfo[chars.Count];
// float textureW = float.Parse(GetValue(common, "scaleW"));
// float textureH = float.Parse(GetValue(common, "scaleH"));
// for (int i = 0; i < chars.Count; i++)
// {
// XmlNode charNode = chars[i];
// if (charNode.Attributes != null)
// {
// charInfos[i].index = int.Parse(GetValue(charNode, "id"));
// Rect vertRect = new Rect();
// vertRect.width = float.Parse(GetValue(charNode, "width"));
// vertRect.height = -(float.Parse(GetValue(charNode, "height")));
// vertRect.x = float.Parse(GetValue(charNode, "xoffset"));
// vertRect.y = -(float.Parse(GetValue(charNode, "yoffset")));
//#if UNITY_4 || UNITY_5_1
// Rect uvRect = new Rect();
// uvRect.x = float.Parse(GetValue(charNode, "x")) / textureW;
// uvRect.width = float.Parse(GetValue(charNode, "width")) / textureW;
// uvRect.height = float.Parse(GetValue(charNode, "height"));
// uvRect.y = (textureH - float.Parse(GetValue(charNode, "y")) - uvRect.height) / textureH;
// uvRect.height = uvRect.height / textureH;
// charInfos[i].width = int.Parse(GetValue(charNode, "xadvance"));
// charInfos[i].flipped = false;
// charInfos[i].uv = uvRect;
// charInfos[i].vert = vertRect;
//#else
// float charX = float.Parse(GetValue(charNode, "x")) / textureW;
// float charWidth = float.Parse(GetValue(charNode, "width")) / textureW;
// float charHeight = float.Parse(GetValue(charNode, "height"));
// float charY = (textureH - float.Parse(GetValue(charNode, "y")) - charHeight) / textureH;
// charHeight = charHeight / textureH;
// // UnFlipped.
// charInfos[i].uvBottomLeft = new Vector2(charX, charY);
// charInfos[i].uvBottomRight = new Vector2(charX + charWidth, charY);
// charInfos[i].uvTopLeft = new Vector2(charX, charY + charHeight);
// charInfos[i].uvTopRight = new Vector2(charX + charWidth, charY + charHeight);
// charInfos[i].minX = (int)vertRect.xMin;
// charInfos[i].maxX = (int)vertRect.xMax;
// charInfos[i].minY = (int)vertRect.yMax;
// charInfos[i].maxY = (int)vertRect.yMin;
// charInfos[i].advance = int.Parse(GetValue(charNode, "xadvance"));
//#endif
// }
// }
// string rootPath = Path.GetDirectoryName(AssetDatabase.GetAssetPath(textAsset));
// string exportPath = rootPath + "/" + Path.GetFileNameWithoutExtension(textAsset.name);
// Material material = GenerateMaterial(exportPath, texture);
// Font font = GenerateFont(exportPath, textAsset.name, material);
// font.characterInfo = charInfos;
// // Save m_LineSpacing.
// XmlNode info = xml.GetElementsByTagName("info")[0];
// SerializedObject serializedFont = new SerializedObject(font);
// SerializedProperty serializedLineSpacing = serializedFont.FindProperty("m_LineSpacing");
// serializedLineSpacing.floatValue = Mathf.Abs(float.Parse(GetValue(info, "size")));
// serializedFont.ApplyModifiedProperties();
// }
// static Material GenerateMaterial(string materialPath, Texture2D texture)
// {
// Shader shader = Shader.Find(DEFAULT_SHADER);
// Material material = LoadAsset<Material>(materialPath + ".mat", new Material(shader));
// material.shader = shader;
// material.mainTexture = texture;
// SaveAsset(material, materialPath + ".mat");
// return material;
// }
// static Font GenerateFont(string fontPath, string fontName, Material material)
// {
// Font font = LoadAsset<Font>(fontPath + ".fontsettings", new Font(fontName));
// font.material = material;
// SaveAsset(font, fontPath + ".fontsettings");
// return font;
// }
// static string GetValue(XmlNode node, string name)
// {
// return node.Attributes.GetNamedItem(name).InnerText;
// }
// static void SaveAsset(Object obj, string path)
// {
// Object existingAsset = AssetDatabase.LoadMainAssetAtPath(path);
// if (existingAsset != null)
// {
// EditorUtility.CopySerialized(obj, existingAsset);
// AssetDatabase.SaveAssets();
// }
// else
// {
// AssetDatabase.CreateAsset(obj, path);
// }
// }
// static T LoadAsset<T>(string path, T defaultAsset) where T : Object
// {
// T existingAsset = AssetDatabase.LoadMainAssetAtPath(path) as T;
// if (existingAsset == null)
// {
// existingAsset = defaultAsset;
// }
// return existingAsset;
// }
//}
//#endif
//#if UNITY_4 || UNITY_5_1
//#pragma warning restore 0618
//#endif