怎么使用BMFont制作美术字体,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
生成 Number.fnt、Number_0.png 两个文件,将其拖入Unity 相应位置,继续下一步
箭头所指就是我们要得到的最终目标,在文本处字体使用它就可以了。
在使用 Tools -> BMFont Maker 之前得先完成以下步骤:
using UnityEngine; using UnityEditor; public class BMFontEditor : EditorWindow { [MenuItem"Tools/BMFont Maker")] static public void OpenBMFontMaker) { EditorWindow.GetWindow<BMFontEditor>false, "BMFont Maker", true).Show); } [SerializeField] private Font targetFont; [SerializeField] private TextAsset fntData; [SerializeField] private Material fontMaterial; [SerializeField] private Texture2D fontTexture; private BMFont bmFont = new BMFont); public BMFontEditor) { } void OnGUI) { targetFont = EditorGUILayout.ObjectField"Target Font", targetFont, typeofFont), false) as Font; fntData = EditorGUILayout.ObjectField"Fnt Data", fntData, typeofTextAsset), false) as TextAsset; fontMaterial = EditorGUILayout.ObjectField"Font Material", fontMaterial, typeofMaterial), false) as Material; fontTexture = EditorGUILayout.ObjectField"Font Texture", fontTexture, typeofTexture2D), false) as Texture2D; if GUILayout.Button"Create BMFont")) { BMFontReader.LoadbmFont, fntData.name, fntData.bytes); //借用NGUI封装的读取类 CharacterInfo[] characterInfo = new CharacterInfo[bmFont.glyphs.Count]; for int i = 0; i < bmFont.glyphs.Count; i++) { BMGlyph bmInfo = bmFont.glyphs[i]; CharacterInfo info = new CharacterInfo); info.index = bmInfo.index; info.uv.x = float)bmInfo.x / float)bmFont.texWidth; info.uv.y = 1 - float)bmInfo.y / float)bmFont.texHeight; info.uv.width = float)bmInfo.width / float)bmFont.texWidth; info.uv.height = -1f * float)bmInfo.height / float)bmFont.texHeight; info.vert.x = 0; info.vert.y = -float)bmInfo.height; info.vert.width = float)bmInfo.width; info.vert.height = float)bmInfo.height; info.width = float)bmInfo.advance; characterInfo[i] = info; } targetFont.characterInfo = characterInfo; if fontMaterial) { fontMaterial.mainTexture = fontTexture; } targetFont.material = fontMaterial; fontMaterial.shader = Shader.Find"UI/Default");//这一行很关键,如果用standard的shader,放到Android手机上,第一次加载会很慢 Debug.Log"Create Font <" + targetFont.name + "> Success"); Close); } } }
将这个类放入工程中,这样在 Tools 中才可以找到 BMFont Maker,它的作用是赋予字体的详细信息,由于它是借助 NGUI 来实现的工具,所以得加上 NGUI 中的以下类: