源战役客户端
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

149 linhas
5.5 KiB

  1. using UnityEngine;
  2. using System.Collections;
  3. using UnityEditor;
  4. public class MyFont : Editor
  5. {
  6. [MenuItem("Tools/MakeFont/导出BMFont " + "%#e")]
  7. static void CreateBmFont()
  8. {
  9. Object[] objs = Selection.objects;
  10. if (objs.Length != 1)
  11. {
  12. Debug.LogError("请选中BMFont导出的fnt数据文件");
  13. return;
  14. }
  15. if (objs[0].GetType() != typeof(TextAsset))
  16. {
  17. Debug.LogError("请选中BMFont导出的fnt数据文件");
  18. return;
  19. }
  20. var item = objs[0];
  21. string AssetFile = AssetDatabase.GetAssetPath(item);
  22. string PathNameNotExt = AssetFile.Remove(AssetFile.LastIndexOf('.'));
  23. string FileNameNotExt = PathNameNotExt.Remove(0, PathNameNotExt.LastIndexOf('/') + 1);
  24. string TextPathName = PathNameNotExt + ".txt";
  25. string MatPathName = PathNameNotExt + ".mat";
  26. string FontPathName = PathNameNotExt + ".fontsettings";
  27. string PngName = PathNameNotExt + "_0.png";
  28. //Texture tex = Resources.Load(PngName) as Texture;
  29. Texture tex = (Texture)AssetDatabase.LoadAssetAtPath(PngName, typeof(Texture));
  30. if (!tex)
  31. {
  32. Debug.LogError("不存在 "+ PngName+" 文件");
  33. return;
  34. }
  35. Material mat = (Material)AssetDatabase.LoadAssetAtPath(MatPathName, typeof(Material));
  36. if (mat == null)
  37. {
  38. //创建材质球
  39. mat = new Material(Shader.Find("Legacy Shaders/Transparent/Diffuse"));
  40. mat.SetTexture("_MainTex", tex);
  41. AssetDatabase.CreateAsset(mat, MatPathName);
  42. }
  43. else
  44. {
  45. mat.shader = Shader.Find("Legacy Shaders/Transparent/Diffuse");
  46. mat.SetTexture("_MainTex", tex);
  47. }
  48. Font font = (Font)AssetDatabase.LoadAssetAtPath(FontPathName, typeof(Font));
  49. if (font == null)
  50. {
  51. font = new Font(FileNameNotExt);
  52. AssetDatabase.CreateAsset(font, FontPathName);
  53. }
  54. TextAsset m_data = (TextAsset)objs[0];
  55. BMFont mbFont = new BMFont();
  56. BMFontReader.Load(mbFont, m_data.name, m_data.bytes); // 借用NGUI封装的读取类
  57. CharacterInfo[] characterInfo = new CharacterInfo[mbFont.glyphs.Count];
  58. for (int i = 0; i < mbFont.glyphs.Count; i++)
  59. {
  60. BMGlyph bmInfo = mbFont.glyphs[i];
  61. CharacterInfo info = new CharacterInfo();
  62. info.index = bmInfo.index;
  63. info.uv.x = (float)bmInfo.x / (float)mbFont.texWidth;
  64. info.uv.y = 1 - (float)bmInfo.y / (float)mbFont.texHeight;
  65. info.uv.width = (float)bmInfo.width / (float)mbFont.texWidth;
  66. info.uv.height = -(float)bmInfo.height / (float)mbFont.texHeight;
  67. info.vert.x = (float)bmInfo.offsetX;
  68. info.vert.y = (float)bmInfo.offsetY;
  69. info.vert.width = (float)bmInfo.width;
  70. info.vert.height = (float)bmInfo.height;
  71. info.width = (float)bmInfo.advance;
  72. characterInfo[i] = info;
  73. }
  74. font.characterInfo = characterInfo;
  75. font.material = mat;
  76. // 通知编辑器有资源被修改了
  77. EditorUtility.SetDirty(font);
  78. // 保存所有修改
  79. AssetDatabase.SaveAssets();
  80. AssetDatabase.Refresh();
  81. Debug.Log("OK");
  82. //ShowNotification(new GUIContent("OK"));
  83. }
  84. [MenuItem("Tools/MakeFont/Make(废弃了)")]
  85. static void Make()
  86. {
  87. Object[] objs = Selection.objects;
  88. if (objs.Length != 2)
  89. {
  90. Debug.LogError("请选中Custom Font文件与BMFont导出的fnt数据文件");
  91. return;
  92. }
  93. Font m_myFont;
  94. TextAsset m_data;
  95. if (objs[0].GetType() == typeof(TextAsset) && objs[1].GetType() == typeof(Font))
  96. {
  97. Debug.Log("text");
  98. m_data = (TextAsset)objs[0];
  99. m_myFont = (Font)objs[1];
  100. Debug.Log("FontName:" + m_myFont.name + "\nData:" + m_data.name);
  101. }
  102. else if (objs[1].GetType() == typeof(TextAsset) && objs[0].GetType() == typeof(Font))
  103. {
  104. m_data = (TextAsset)objs[1];
  105. m_myFont = (Font)objs[0];
  106. Debug.Log("FontName:" + m_myFont.name + "\nData:" + m_data.name);
  107. }
  108. else
  109. {
  110. Debug.LogError("请选中Custom Font文件与BMFont导出的fnt数据文件");
  111. Debug.Log("FontName:null" + "\nData:null");
  112. return;
  113. }
  114. BMFont mbFont = new BMFont();
  115. BMFontReader.Load(mbFont, m_data.name, m_data.bytes); // 借用NGUI封装的读取类
  116. CharacterInfo[] characterInfo = new CharacterInfo[mbFont.glyphs.Count];
  117. for (int i = 0; i < mbFont.glyphs.Count; i++)
  118. {
  119. BMGlyph bmInfo = mbFont.glyphs[i];
  120. CharacterInfo info = new CharacterInfo();
  121. info.index = bmInfo.index;
  122. info.uv.x = (float)bmInfo.x / (float)mbFont.texWidth;
  123. info.uv.y = 1 - (float)bmInfo.y / (float)mbFont.texHeight;
  124. info.uv.width = (float)bmInfo.width / (float)mbFont.texWidth;
  125. info.uv.height = -(float)bmInfo.height / (float)mbFont.texHeight;
  126. info.vert.x = (float)bmInfo.offsetX;
  127. info.vert.y = (float)bmInfo.offsetY;
  128. info.vert.width = (float)bmInfo.width;
  129. info.vert.height = (float)bmInfo.height;
  130. info.width = (float)bmInfo.advance;
  131. characterInfo[i] = info;
  132. }
  133. m_myFont.characterInfo = characterInfo;
  134. Debug.Log("OK");
  135. }
  136. }