using System;
using UnityEditor;
using UnityEngine;public class CreateFont : EditorWindow
{[MenuItem("创建字体")]public static void Open(){GetWindow<CreateFont>("创建字体");}private Texture2D tex;private string specialCharAscii;private void OnGUI(){GUILayout.BeginVertical();GUILayout.Space(10);GUILayout.BeginHorizontal();GUILayout.Label("字体图片:");tex = (Texture2D)EditorGUILayout.ObjectField(tex, typeof(Texture2D), true);GUILayout.EndHorizontal();GUILayout.Space(10);GUILayout.BeginHorizontal();GUILayout.Label("Special Char Ascii");specialCharAscii = EditorGUILayout.TextField(specialCharAscii);GUILayout.EndHorizontal();GUILayout.Space(10);GUILayout.BeginHorizontal();if (GUILayout.Button("创建", GUILayout.Height(35))){Create();}GUILayout.EndHorizontal();GUILayout.EndVertical();}private void Create(){if (tex == null){Debug.LogError("创建失败,图片为空!");return;}string selectionPath = AssetDatabase.GetAssetPath(tex);string fontPath = selectionPath.Split(new[] { tex.name }, StringSplitOptions.None)[0];string fontName = tex.name;string[] specialChar = new string[] { };if (specialCharAscii != null && specialCharAscii.Length > 0)specialChar = specialCharAscii.Split(',', (char)StringSplitOptions.RemoveEmptyEntries);string fontPathName = fontPath + fontName + ".fontsettings";string matPathName = fontPath + fontName + ".mat";float lineSpace = 0.1f;object[] sprites = AssetDatabase.LoadAllAssetsAtPath(selectionPath);if (sprites.Length > 0){Material mat = new Material(Shader.Find("GUI/Text Shader"));mat.SetTexture("_MainTex", tex);Font m_myFont = new Font();m_myFont.material = mat;CharacterInfo[] characterInfo = new CharacterInfo[sprites.Length - 1];for (int i = 1; i < sprites.Length; i++){Sprite sprite = sprites[i] as Sprite;if (sprite.rect.height > lineSpace)lineSpace = sprite.rect.height;}for (int i = 0; i < sprites.Length - 1; i++){Sprite spr = sprites[i + 1] as Sprite;CharacterInfo info = new CharacterInfo();if (i < 10) info.index = 48 + i;else if (specialChar.Length + 10 > i)info.index = int.Parse(specialChar[i - 10]);Rect rect = spr.rect;float pivot = spr.pivot.y / rect.height - 0.5f;if (pivot > 0)pivot = -lineSpace / 2 - spr.pivot.y;else if (pivot < 0)pivot = -lineSpace / 2 + rect.height - spr.pivot.y;elsepivot = -lineSpace / 2;int offsetY = (int)(pivot + (lineSpace - rect.height) / 2);info.uvBottomLeft = new Vector2(rect.x / tex.width, rect.y / tex.height);info.uvBottomRight = new Vector2((rect.x + rect.width) / tex.width, rect.y / tex.height);info.uvTopLeft = new Vector2(rect.x / tex.width, (rect.y + rect.height) / tex.height);info.uvTopRight = new Vector2((rect.x + rect.width) / tex.width, (rect.y + rect.height) / tex.height);info.minX = 0;info.minY = -(int)rect.height - offsetY;info.maxX = (int)rect.width;info.maxY = -offsetY;info.advance = (int)rect.width;characterInfo[i] = info;}AssetDatabase.CreateAsset(mat, matPathName);AssetDatabase.CreateAsset(m_myFont, fontPathName);m_myFont.characterInfo = characterInfo;EditorUtility.SetDirty(m_myFont);AssetDatabase.SaveAssets();AssetDatabase.Refresh();Debug.LogError("创建字体成功");}else{Debug.LogError("图集错误!");}}
}

需要以下几步就可以搞定啦

  1. 将图片的textureType改为sprite,spriteMode改为Multiple
  2. 打开spriteEditor, 把一个Sprite切割成多个
  3. 在unity的菜单栏找到 创建字体
  4. 在project界面找到刚才的图片,拖入到工具的 字体图片 栏里
  5. 如果有特殊符号,可以在工具的 Special Char Ascii 里填上对应的ASCII码,有多个时,可以用逗号,隔开
  6. 点击创建。OK啦

注意:图片数字要以0开始顺序排哦

创建sprite数字字体相关推荐

  1. cocos-creator使用记录20_创建数字字体和图片字体

    1.官方创建艺术数字字体 http://docs.cocos.com/creator/manual/zh/asset-workflow/label-atlas.html 需要准备一张按从0到9的顺序排 ...

  2. truetype字体怎么转换成普通字体_如何创建自己的字体和编辑TrueType字体 | MOS86

    Wouldn 在这篇文章中,我显然,付费的程序往往具有更多的功能和更好的界面来处理字体,但也有一些很好的免费的. 免费字体编辑器 Let有几百万字体可以在线下载或购买,所以如果你 创建新字体的最简单方 ...

  3. javafx动画_JavaFX:创建Sprite动画

    javafx动画 到目前为止,尽管我的大多数文章都涉及JavaFX属性和绑定,但是今天我想写一讲我也致力于JavaFX运行时的另一部分:动画API. 在本文中,我将解释如何在JavaFX中编写自定义动 ...

  4. JavaFX:创建Sprite动画

    到目前为止,尽管我的大多数文章都涉及JavaFX属性和绑定,但今天我想写一讲我也致力于JavaFX运行时的另一部分:动画API. 在本文中,我将解释如何在JavaFX中编写自定义动画,以及如何使用这种 ...

  5. 实例:使用纹理对象创建Sprite对象

    精灵类是Sprite,它的类图如下图所示: Sprite类直接继承了Node类,具有Node基本特征.此外,我们还可以看到Sprite类的派生类有:PhysicsSprite和Skin.Physics ...

  6. Unity 中 创建 TextMeshPro 中文字体(含常见汉字 TXT 文件)

    TextMeshPro是个好东西,但是原生不支持中文,需要把中文字体转换为TextMeshPro才可以使用,即创建TextMeshPro中文字体,为TextMeshPro添加中文支持.(文章内含 常见 ...

  7. 如何在谷歌地图自定义范围_如何在Google表格中更改和创建自定义数字格式

    如何在谷歌地图自定义范围 Khamosh Pathak Khamosh Pathak By default, Google Sheets doesn't format numbers. If you' ...

  8. css实现电子数字字体

    css实现电子数字字体 转载 css 页面机械/数字电子 字体怎么实现? 本文链接:https://blog.csdn.net/m0_45305745/article/details/12494977 ...

  9. vue 数据大屏使用数字字体

    一.下载数字字体 二.转换字体 三.引入项目 一.下载数字字体 下载地址:https://www.dafont.com/theme.php?cat=302&text=0123456789 字体 ...

最新文章

  1. 记一次内核模块查看 - 初步通过文件厂商判断有无可疑内核模块
  2. MOVE-CORRESPONDING 应该注意的语法特点
  3. exe一机一码加密工具_文件夹加密软件有哪些作用?
  4. SpringBoot与SpringCloud的关系与区别
  5. 站立会议05(第二次冲刺)
  6. 对ContentProvider中getType方法的一点理解
  7. CentOS 安装MySQL(rpm)提示错误Header V3 DSA/SHA1 Signature
  8. 来自 PHP 之外的变量(HTML 表单中的数组、变量名中的点)
  9. 【250期门诊集锦】痛并快乐着的正则表达式
  10. Spring Framework的核心:Spring AOP
  11. 身份证读取设备开发解决方案:3、单片机读取身份证信息的demo
  12. 【肌电信号】基于matlab GUI MUAP波形【含Matlab源码 736期】
  13. tf hub bigGan 猫变狗
  14. 一口气读完系列最穷的穷光蛋
  15. Re10:读论文 Are we really making much progress? Revisiting, benchmarking, and refining heterogeneous gr
  16. using runtime html4,为什么我不能在C#中引用System.Runtime.Serialization.Json
  17. 常用jquery方法 总结
  18. android更改menu字体颜色,Android 修改 Menu字体颜色
  19. java走台阶_走台阶算法 java实现
  20. 网络安全实验室—脚本关

热门文章

  1. 【校招分享】Java非科班自学指南
  2. Python爬虫之数据解析和提取
  3. linux终端输出c语言程序,Linux终端程序用c语言实现改变输出的字的颜色
  4. TPLink桥接Netcore 无线扩展
  5. 最小堆以及最小优先队列的实现
  6. java ocsp校验_Nginx使用OCSP验证客户端证书
  7. net项目对接java平台_用Java解决项目对接短信验证码难问题:OkHttp和Unirest介绍
  8. keil注释打不出中文?
  9. 智能语音电话机器人,智能电销系统
  10. python打字游戏增加开始页面_pygame实现打字游戏