使用BMFont的方式,目的是得到fnt文件,实际上是xml格式文件。

<font><info face="font" size="80" /><common lineHeight="80" scaleW="122" scaleH="114" pages="1" /><pages><page id="0" file="font.png" /></pages><chars count="13"><char id="48" x="32" y="0" width="31" height="37" xoffset="0" yoffset="43" xadvance="32" /><!-- 0 --><char id="49" x="64" y="76" width="28" height="37" xoffset="0" yoffset="43" xadvance="29" /><!-- 1 --><char id="50" x="32" y="76" width="31" height="37" xoffset="0" yoffset="43" xadvance="32" /><!-- 2 --><char id="51" x="64" y="38" width="30" height="37" xoffset="0" yoffset="43" xadvance="31" /><!-- 3 --><char id="52" x="64" y="0" width="31" height="37" xoffset="0" yoffset="43" xadvance="32" /><!-- 4 --><char id="53" x="0" y="0" width="31" height="37" xoffset="0" yoffset="43" xadvance="32" /><!-- 5 --><char id="54" x="32" y="38" width="31" height="37" xoffset="0" yoffset="43" xadvance="32" /><!-- 6 --><char id="55" x="93" y="76" width="28" height="37" xoffset="0" yoffset="43" xadvance="29" /><!-- 7 --><char id="56" x="0" y="76" width="31" height="37" xoffset="0" yoffset="43" xadvance="32" /><!-- 8 --><char id="57" x="0" y="38" width="31" height="37" xoffset="0" yoffset="43" xadvance="32" /><!-- 9 --><char id="58" x="95" y="38" width="20" height="30" xoffset="0" yoffset="50" xadvance="21" /><!-- : --><char id="32" x="0" y="0" width="0" height="0" xoffset="0" yoffset="0" xadvance="20" /><!--   --><char id="9" x="0" y="0" width="0" height="0" xoffset="0" yoffset="0" xadvance="160" /><!--      --></chars><kernings count="0"></kernings>
</font>

得到图集个fnt文件后,网上一般的方法是手动计算在Unity中的参数,有些繁琐,在这里写一个Editor脚本来自动完成这个过程。直接上代码:

using System;
using System.Collections.Generic;
using System.IO;
using System.Xml;
using UnityEditor;
using UnityEngine;
public class CreateFontFromFnt : EditorWindow
{[MenuItem("Tools/创建字体(Fnt)")]static void DoIt(){GetWindow<CreateFontFromFnt>("创建字体");}private string fontName;private string fontPath;private Texture2D tex;private string fntFilePath;private void OnGUI(){GUILayout.BeginVertical();GUILayout.BeginHorizontal();GUILayout.Label("字体名称:");fontName = EditorGUILayout.TextField(fontName);GUILayout.EndHorizontal();GUILayout.BeginHorizontal();GUILayout.Label("字体图片:");tex = (Texture2D)EditorGUILayout.ObjectField(tex, typeof(Texture2D), true);GUILayout.EndHorizontal();GUILayout.BeginHorizontal();if (GUILayout.Button(string.IsNullOrEmpty(fontPath) ? "选择存储字体路径" : fontPath)){fontPath = EditorUtility.OpenFolderPanel("字体路径", Application.dataPath, "");if (string.IsNullOrEmpty(fontPath)){Debug.Log("取消选择路径");}else{fontPath = fontPath.Replace(Application.dataPath, "") + "/";}}GUILayout.EndHorizontal();GUILayout.BeginHorizontal();if (GUILayout.Button(string.IsNullOrEmpty(fntFilePath) ? "选择fnt文件" : fntFilePath)){//桌面路径:Environment.GetFolderPath(Environment.SpecialFolder.DesktopfntFilePath = EditorUtility.OpenFilePanelWithFilters("选择fnt文件", Application.dataPath, new string[] { "", "fnt" });if (string.IsNullOrEmpty(fntFilePath)){Debug.Log("取消选择路径");}}GUILayout.EndHorizontal();GUILayout.BeginHorizontal();if (GUILayout.Button("创建")){Create();}GUILayout.EndHorizontal();GUILayout.EndVertical();}private void Create(){if (string.IsNullOrEmpty(fntFilePath)){Debug.LogError("fnt为空");return;}if (tex == null){Debug.LogError("字体图片为空");return;}string fontSettingPath = fontPath + fontName + ".fontsettings";string matPath = fontPath + fontName + ".mat";if (File.Exists(Application.dataPath + fontSettingPath)){Debug.LogErrorFormat("已存在同名字体文件:{0}", fontSettingPath);return;}if (File.Exists(Application.dataPath + matPath)){Debug.LogErrorFormat("已存在同名字体材质:{0}", matPath);return;}var list = new List<CharacterInfo>();XmlDocument xmlDoc = new XmlDocument();var content = File.ReadAllText(fntFilePath, System.Text.Encoding.UTF8);xmlDoc.LoadXml(content);var nodelist = xmlDoc.SelectNodes("font/chars/char");foreach (XmlElement item in nodelist){CharacterInfo info = new CharacterInfo();var id = int.Parse(item.GetAttribute("id"));var x = float.Parse(item.GetAttribute("x"));var y = float.Parse(item.GetAttribute("y"));var width = float.Parse(item.GetAttribute("width"));var height = float.Parse(item.GetAttribute("height"));info.index = id;//纹理映射,上下翻转  info.uvBottomLeft = new Vector2(x / tex.width, 1 - (y + height) / tex.height);info.uvBottomRight = new Vector2((x + width) / tex.width, 1 - (y + height) / tex.height);info.uvTopLeft = new Vector2(x / tex.width, 1 - y / tex.height);info.uvTopRight = new Vector2((x + width) / tex.width, 1 - y / tex.height);info.minX = 0;info.maxX = (int)width;info.minY = -(int)height / 2;info.maxY = (int)height / 2;info.advance = (int)width;list.Add(info);}Material mat = new Material(Shader.Find("GUI/Text Shader"));mat.SetTexture("_MainTex", tex);Font m_myFont = new Font();m_myFont.material = mat;AssetDatabase.CreateAsset(mat, "Assets" + matPath);AssetDatabase.CreateAsset(m_myFont, "Assets" + fontSettingPath);m_myFont.characterInfo = list.ToArray();EditorUtility.SetDirty(m_myFont);AssetDatabase.SaveAssets();AssetDatabase.Refresh();Debug.Log("创建成功!");}
}  

Unity 制作字体相关推荐

  1. 【Unity3D游戏开发】NGUI制作字体的三种方法 (二一)

    NGUI制作字体的三种方法 主要参考两篇博文: (1).NGUI制作字体的三种方法 (2).使用位图字体工具BMFont从图片生成自定义字体 1.BMFont下载地址 http://www.angel ...

  2. 零基础教你Unity制作像素鸟游戏 【文末源码】

    爆肝三天终于写完了,一文教你从零开启Unity制作像素鸟游戏 前言 一,新建目录 二,制作材质 三,场景搭建 四,创建地图 五,制作管道 六,创建主角 七,小鸟动起来 八,游戏状态控制 九,摄像机跟随 ...

  3. NGUI制作字体的三种方法

    主要参考两篇博文: (1).NGUI制作字体的三种方法 (2).使用位图字体工具BMFont从图片生成自定义字体 1.BMFont下载地址 http://www.angelcode.com/produ ...

  4. Unity 艺术字体

    unity自带字体往往不能满足我们游戏开发的所需要达到的效果,我们一般是网上下载字体或者自己制作字体,下面介绍一种字体的制作方法 1.下载相应的制作软件:下载地址:https://yunpan.cn/ ...

  5. Unity美术字体创建

    文章目录 1 下载Adobe AIR 2 下载字体制作软件ShoeBox 3 制作字体文件 3.1 散图做成图集(如果已经得到图集则跳过) 3.2 图集制作fnt字体文件 3.3 根据字体文件生成un ...

  6. 【游戏开发实战】使用Unity制作水果消消乐游戏教程(八):游戏得分加分效果

    文章目录 一.前言 二.使用TextMeshPro显示得分 1.导入TTF字体到工程中 2.创建字源txt文件 3.生成字体asset 4.制作得分预设 三.得分数字动画 四.得分代码 五.运行测试 ...

  7. 【抖音小游戏】 Unity制作抖音小游戏方案 最新完整详细教程来袭【持续更新】

    前言 [抖音小游戏] Unity制作抖音小游戏方案 最新完整详细教程来袭[持续更新] 一.相关准备工作 1.1 用到的相关网址 1.2 注册字节开发者后台账号 二.相关集成工作 2.1 下载需要的集成 ...

  8. Unity 自定义字体 新功能 一

    Unity 自定义字体 新功能 一 首先找一个字体库,我用的 Windws 系统,直接找微软的字拿来用, 在 目录下 C:\Windows\Fonts 随便找一个字体 在此我就拿 华为琥珀 字体(字体 ...

  9. Unity制作2D动作平台游戏视频教程

    Metroidvania工具包:打造统一的2D行动平台 流派:电子学习| MP4 |视频:h264,1280×720 |音频:AAC,48.0 KHz 语言:英语+中英文字幕(根据原英文字幕机译更准确 ...

最新文章

  1. 【Qt】Qt再学习(七):QLocalServer、QLocalSocket
  2. 技能 | Python处理图像10大经典库
  3. Docker for Windows 使用 VMware WorkStation
  4. windows远程桌面管理工具下载_vnc viewer 64位下载,3步实现vnc viewer 64位下载
  5. 锐捷云课堂助力海南农垦中学 根治计算机教室“老病根”
  6. linux系统找回数据,Linux系统上面误删的数据找回
  7. addonsmaker怎么制作_addonsmaker
  8. hdu3699(不等式dfs)
  9. 怎样从frm ibd恢复mysql_怎样从frm,ibd恢复MYSQL
  10. 宾馆管理系统mysql_宾馆管理系统(含源码和数据库文件)
  11. 神奇的pdfkit工具——将字符串保存为pdf文件
  12. 在weblogic上配置数据源
  13. 7z替换exe文件内容不能替换文件_Windows小技巧 批处理文件实现目录下文件批量打包压缩...
  14. 测试用例(功能用例)——资产申购、统计报表
  15. CNC精雕机加工需要牢记的22个常识,一起来学习
  16. 微信发送语音功能测试用例
  17. 吉林大学数据库系统原理期末复习笔记
  18. 后台系统登录一般流程
  19. python的.py文件生成可运行的exe文件
  20. 刷爆了!程序员都在点赞的Python学习图谱!你安利了吗?

热门文章

  1. 硬件设备(门禁人脸识别机)调试总结
  2. Outlook如何将相同讨论的邮件放到一起
  3. H3C模拟器LITO 连接 本地网卡
  4. InterSystems开发者社区中文版上线:打造更高效的技术交流和资源共享平台
  5. 书评:J2EE设计模式 O’REILLY William CrawfordJonathan Kaplan 中国电力出版社
  6. 好用到爆的Python自动化办公教程pdf,Python × Excel × Word × PPT 一次搞定
  7. 【笔记】在Android上绘制小车行进路线图并标记
  8. c语言输入r1 r2垫片的面积,C语言基础入门设计
  9. 在windwos 2012上安装onlyoffice的记录
  10. 怎样用计算机进入手机驱动程序,小米4驱动怎么安装以连接电脑的USB驱动程序...