一、Unity支持把一个Sprite切割成多个。可以用这种方式代替BMFont导出的fnt文件。

二、将图集的TextureType设置为Sprite,然后把SpriteMode设为Multiple,应用Apply。

三、打开SpriteEditor,对图片进行切割。然后选中每一个Sprite把Name设置成字符对应的ASCII码。

4、添加编辑器工具脚本

using UnityEngine;
using UnityEditor;
using System.IO;public class CreateFont : EditorWindow
{[MenuItem("Tools/创建字体(sprite)")]public static void Open(){GetWindow<CreateFont>("创建字体");}private Texture2D tex;private string fontName;private string fontPath;private void OnGUI(){GUILayout.BeginVertical();GUILayout.BeginHorizontal();GUILayout.Label("字体图片:");tex = (Texture2D)EditorGUILayout.ObjectField(tex, typeof(Texture2D), true);GUILayout.EndHorizontal();GUILayout.BeginHorizontal();GUILayout.Label("字体名称:");fontName = EditorGUILayout.TextField(fontName);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("创建")){Create();}GUILayout.EndHorizontal();GUILayout.EndVertical();}private void Create(){if (tex == null){Debug.LogWarning("创建失败,图片为空!");return;}if (string.IsNullOrEmpty(fontPath)){Debug.LogWarning("字体路径为空!");return;}if (fontName == null){Debug.LogWarning("创建失败,字体名称为空!");return;}else{if (File.Exists(Application.dataPath + fontPath + fontName + ".fontsettings")){Debug.LogError("创建失败,已存在同名字体文件");return;}if (File.Exists(Application.dataPath + fontPath + fontName + ".mat")){Debug.LogError("创建失败,已存在同名字体材质文件");return;}}string selectionPath = AssetDatabase.GetAssetPath(tex);if (selectionPath.Contains("/Resources/")){string selectionExt = Path.GetExtension(selectionPath);if (selectionExt.Length == 0){Debug.LogError("创建失败!");return;}string fontPathName = fontPath + fontName + ".fontsettings";string matPathName = fontPath + fontName + ".mat";float lineSpace = 0.1f;//string loadPath = selectionPath.Remove(selectionPath.Length - selectionExt.Length).Replace("Assets/Resources/", "");string loadPath = selectionPath.Replace(selectionExt, "").Substring(selectionPath.IndexOf("/Resources/") + "/Resources/".Length);Sprite[] sprites = Resources.LoadAll<Sprite>(loadPath);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];for (int i = 0; i < sprites.Length; i++){if (sprites[i].rect.height > lineSpace){lineSpace = sprites[i].rect.height;}}for (int i = 0; i < sprites.Length; i++){Sprite spr = sprites[i];CharacterInfo info = new CharacterInfo();try{info.index = System.Convert.ToInt32(spr.name);}catch{Debug.LogError("创建失败,Sprite名称错误!");return;}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;}else{pivot = -lineSpace / 2;}int offsetY = (int)(pivot + (lineSpace - rect.height) / 2);info.uvBottomLeft = new Vector2((float)rect.x / tex.width, (float)(rect.y) / tex.height);info.uvBottomRight = new Vector2((float)(rect.x + rect.width) / tex.width, (float)(rect.y) / tex.height);info.uvTopLeft = new Vector2((float)rect.x / tex.width, (float)(rect.y + rect.height) / tex.height);info.uvTopRight = new Vector2((float)(rect.x + rect.width) / tex.width, (float)(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, "Assets" + matPathName);AssetDatabase.CreateAsset(m_myFont, "Assets" + fontPathName);m_myFont.characterInfo = characterInfo;EditorUtility.SetDirty(m_myFont);AssetDatabase.SaveAssets();AssetDatabase.Refresh();//刷新资源Debug.Log("创建字体成功");}else{Debug.LogError("图集错误!");}}else{Debug.LogError("创建失败,选择的图片不在Resources文件夹内!");}}
}

Unity 不使用BMFont创建Font字体相关推荐

  1. unity 使用BMFont 制作自定义字体

    unity cocos 使用BMFont,生成自定义字体 1.BMFont下载地址 http://www.angelcode.com/products/bmfont/ 本篇讲解如何利用美工提供的字符图 ...

  2. (二)unity优化方案:利用BMFont工具制作font字体(在UGUI和NGUI中使用)

    今天的任务是制作一个在NGUI和UGUI中可以使用的新字体,利用该新字体的文本可以正常显示在界面上,并且还支持中文字符的输入与显示.我在这里记录下制作过程,希望可以帮助到其他爱好者. 为什么要用字体集 ...

  3. Unity 制作font字体

    有很多网友介绍Unity 创建并使用font的方法,这里总结一下备忘,同时网友的部分文章有一些小坑被我踩到,在这里记录一下,希望能帮助其他同学 一.首先创建字体(ttf文件),网上有用BitMap工具 ...

  4. Unity/UI —— 使用字符图片自定义字体(Custom Font)

    前言 在Unity的UI设计中,我们经常会遇到需要自定义字体的情况.毕竟Unity自带的字体只有Arial一种,根本无法满足人民群众对于美的向往.当然,全能的Unity支持我们导入或创建字体,并可以在 ...

  5. Unity TextMeshpro创建中文字体

    使用Textmeshpro创建自定义中文字体 textmeshpro常用字体7000个 链接:https://pan.baidu.com/s/1nwLzZ7w0XOOi4wQ09Dl4Yg?pwd=p ...

  6. unity怎么在文本中修改字体_[专栏作家]UGUI中CustomFont字体使用与制作

    原标题:[专栏作家]UGUI中CustomFont字体使用与制作 前言: 如何在UGUI中使用自定义的数字图片.在开发过程中,美术同学会给出类似艺术数字图片如下图: 那在UGUI系统中如何使用呢? U ...

  7. Unity发布WebGL不显示中文字体问题

    在Unity发布WebGL的时候中文不能够显示,主要在于字体的设置,Unity默认的字体是Arial字体 首先想到的是字体类型不对,接下来更换字体 解决方案: 1.在Asset下创建文件夹,Font ...

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

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

  9. css的font修改颜色,css的font字体颜色如何设置

    css的font字体颜色设置方法:1.直接在标签上使用"color:颜色"设置字体颜色:2.通过给font标签添加class属性,在css标签中通过该class设置字体颜色. 本教 ...

  10. Unity 游戏多语言解决方案和字体错误解决方法的想法

    今天先想一想怎么给增加多语言,我看着官方的那个localization的方案感觉很麻烦,到后面的时候,不可能每一个都在他的localization窗口里面增加语言或者脚本里面增加语言,而且那个太容易给 ...

最新文章

  1. 十分钟掌握多项式回归:非线性预测
  2. vb.net2019-跨平台
  3. Dev C++ 无法调试问题的解决——小白也能看懂!
  4. 自由、开源及其敌人 —— RMS事件簿
  5. php运行出现Call to undefined function curl_init()解决方法
  6. 飞鸽传书计算乘积的聚合函数跑哪去了呢?
  7. Anchor-free 目标检测之 ExtremeNet
  8. python与线性代数 矩阵方程
  9. [WARNING]考前必读?!
  10. ads滤波器仿真(2)——带通滤波器
  11. 长微博生成器html,微信文章怎么搬到微博中?微信内容一键生成长微博的技巧
  12. CW测速雷达原理介绍
  13. 服务器怎么增加独立显卡,dellr610服务器增加独立显卡(dell服务器装显卡)
  14. 微信wifi路由器怎么连接服务器,介绍下微信WIFI路由器怎么设置的方法
  15. 计算机为何用二进制而不用十进制,为什么计算机使用二进制而不是十进制?
  16. java 账户挤下线提示_运用session来控制用户的异地登录被挤下线情况
  17. 细数人工智能这几年的悲与喜
  18. 缓存着色 Page color测试
  19. 【企业管理论文】互联网时代的企业管理创新问题探究(节选)
  20. 从翻硬币游戏看敏捷开发

热门文章

  1. Shiro设定密码匹配规则(自定义密码验证匹配器)
  2. Ripro子主题Eeesucai-child集成后台美化包源码
  3. 网络游戏植入营销案例
  4. Delphi android 开发视频教程
  5. 甘肃暴雨强度公式_甘肃暴雨强度公式
  6. 在Eclipse4.2x中安装最新版插件WindowsBuilder
  7. 不知为不知--信息论和最大熵原则
  8. PP苹果助手 v2.3.0 官方版
  9. vray5.1 for sketchup 安装教程
  10. axure如何导出原件_彻底抛弃WORD!教你用Axure快速输出高质量的PRD