一键制作数字图片字体
切割数字图片sprite,例如一张0-9排成一列的图片,切割成10张图
切割好之后将此sprite放入Resources文件夹下 , 鼠标点击选择此图片
然后通过菜单窗口点Create_Font开始制作

  • 源码:
#if UNITY_EDITORusing UnityEngine;using UnityEditor;using System.Collections;//本方法是通过裁切的sprite导出字体文件,裁切使用的是unity自带的sprite editor,方便操作。  //另外,裁切之后,每个sprite的名字的最后一个字符对应了ascii码的编码,比如:  //0: 我们只要将sprite的名字命名成xxx0,就可以了!  //由于使用到的了sprite加载,所以字体图片请放在Resources目录下面,等制作完毕,再把他们放到fonts文件夹或者其他文件夹中即可。  namespace _GameScripts{public class FontMaker{[MenuItem("GameTools/Create_Font")]static void CreateMyFontSprite(){if (Selection.objects == null) return;if (Selection.objects.Length == 0){Debug.LogWarning("没有选中Sprite文件,需要将Sprite Mode设置成Multiple,切分好,并且以以名字的最后一个字符当做ascii码");return;}string resoursePath = "Resources";Object o = Selection.objects[0];if (o.GetType() != typeof(Texture2D)){Debug.LogWarning("选中的并不是图片文件");return;}string selectionPath = AssetDatabase.GetAssetPath(o);if (selectionPath.Contains(resoursePath)){string selectionExt = System.IO.Path.GetExtension(selectionPath);if (selectionExt.Length == 0){return;}string loadPath = selectionPath.Remove(selectionPath.Length - selectionExt.Length);string fontPathName = loadPath + ".fontsettings";string matPathName = loadPath + ".mat";float lineSpace = 0.1f;//字体行间距,下面会根据最高的字体得到行间距,如果是固定高度,可以在这里自行调整  loadPath = System.IO.Path.GetFileNameWithoutExtension(selectionPath);Sprite[] sprites = Resources.LoadAll<Sprite>(loadPath);if (sprites.Length > 0){//以textrue方式获得该资源,可以设置到创建的材质中去  Texture2D tex = o as Texture2D;//创建字体材质,并且将图片设置好  Material mat = new Material(Shader.Find("GUI/Text Shader"));AssetDatabase.CreateAsset(mat, matPathName);mat.SetTexture("_MainTex", tex);//创建字体文件,设置字体文件的材质  Font m_myFont = new Font();m_myFont.material = mat;AssetDatabase.CreateAsset(m_myFont, fontPathName);//创建字体中的字符集数组  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();//设置ascii码,使用切分sprite的最后一个字母  switch (i) {case 10:info.index = 46;break;case 11:info.index = 43;break;case 12:info.index = 45;break;case 13:info.index = 121;break;default:info.index = (int)spr.name [spr.name.Length - 1];break;}Rect rect = spr.rect;//根据pivot设置字符的偏移,具体需要做成什么样的,可以根据自己需要修改公式  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;}Debug.Log(pivot);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;}// lineSpace += 2;  m_myFont.characterInfo = characterInfo;EditorUtility.SetDirty(m_myFont);//设置变更过的资源  AssetDatabase.SaveAssets();//保存变更的资源  AssetDatabase.Refresh();//刷新资源,貌似在Mac上不起作用  //由于上面fresh之后在编辑器中依然没有刷新,所以暂时想到这个方法,  //先把生成的字体导出成一个包,然后再重新导入进来,这样就可以直接刷新了  //这是在Mac上遇到的,不知道Windows下面会不会出现,如果不出现可以把下面这一步注释掉  AssetDatabase.ExportPackage(fontPathName, "temp.unitypackage");AssetDatabase.DeleteAsset(fontPathName);AssetDatabase.ImportPackage("temp.unitypackage", true);AssetDatabase.Refresh();//最佳高度:上下各留一个像素的间距,如果不需要可以注释掉,根据需求更改  //打印是为了使使用者方便填写行高,因为font不支持设置行高。  Debug.Log("创建字体成功, 最大高度:" + lineSpace + ", 最佳高度:" + (lineSpace + 2));}else{Debug.LogWarning("没有选中Sprite文件,需要将Sprite放到Resources文件夹下面,可以参考函数上方的说明操作");}}}}}#endif

Unity 制作数字图片字体相关推荐

  1. Unity制作AR图片和视频展示

    注:本次用的AR SDK是vuforia,所以用这个SDK做开发解释说明,并且采用循序渐进的方式,逐步做出扫描出图可交互图片,视频和模型动画. 识别出现图片的做法: 1:先登录vuforia官网,没有 ...

  2. Unity制作自定义字体的两种方法

    Unity支持自定义图片字体(CustomFont),网上有很多教程,细节不尽相同,当概括起来基本就是两种方式.一是使用BMFont,导出图集和.fnt文件,再使用图集在Unity中设置得到字体.二是 ...

  3. 制作:图片数字---数字字体

    需求分析 在开发游戏时,有时候需要把数字型图片转换为数字字体,以方便的在脚本中直接使用数字就可以完成数字以"图片"的形式显示在游戏画面中. 制作流程 1. 准备好游戏需要的数字资源 ...

  4. unity 字体width_unity制作图片字体

    有时候美术会给出一系列的艺术字,例如数字0,1,2,3,4,5,6,7,8,9,这些字以图片的形式给开发人员,这时候图片的用法怎么用呢? 第一种想到的方法是把图片按字命名,然后以字为key存成字典,获 ...

  5. Unity UGUI 数字使用图片显示-BMFont

    Unity UGUI 数字使用图片显示-BMFont BMFont 之前使用Cocos引擎的时候需要用到艺术字也就是将数字使用美术给的图片来代替显示,也就是要做一个新字体专门用来显示艺术字,当时用的是 ...

  6. Unity自定义美术字体(图片字体fontsettings)

    目录 本文内容 效果 工具代码 制作美术字体 1 资源 1.1 资源方式 1.2 资源命名 1.3 资源命名配置 2 打包字体 2.1 创建字体 2.2 更新字体 3 字体使用 本文内容 开发过程有个 ...

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

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

  8. Unity制作虚拟按键输入数字答案

    Unity制作虚拟按键输入数字答案 1.层级结构 GameScene是Panel,其实就是一张灰白色的背景:1level-1就是灰色的背景:Text就是题目:InputField是输入框:input是 ...

  9. lua/cocos加载动画以及可以使用加载纹理的方式来替换图片并且加载个人制作的艺术字体(fnt字体)

    1.加载spine/json(ExportJson)骨骼动画 现在用的比较多 local spineAnim = sp.SkeletonAnimation:create("base/res/ ...

  10. Unity 制作font字体

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

最新文章

  1. winform 打印控件
  2. AIX 访问Linux NFS共享错误案例
  3. Namespace declaration statement has to be the very first statement in the script
  4. Python 类继承,__bases__, __mro__, super
  5. 用户体验改善案例_优化用户体验案例研究的五种方法
  6. jax-rs/jersey_在Oracle Cloud上的Prime-UI,JAX-RS和Jersey和Gson
  7. mysql @符号_MySQL 数值类型
  8. leetcode - 279. 完全平方数
  9. 什么是浏览器同源策略?
  10. 欠拟合和过拟合的一般解决方法
  11. 《Python cookbook》笔记二
  12. Mybatis-plus 多表联查实现(非手写sql)
  13. android 平板键盘布局,7款Android平板输入法横向评测,安卓平板软件HD/THD下载
  14. [kubernetes]-kubernetes+nfs创建高可用mysql
  15. 目前常见的web网络安全漏洞
  16. AM335x 如何修改phy及双网络使用说明(精华!!!)
  17. 路由宝刷华硕rt-n14u_如何在2019年取消硬砖路由器的砖块化(以华硕RT-N16为例)
  18. 希捷1.5T硬盘2天变废铁!12代依然问题重重!购买慎重
  19. 神经网络方法研究及应用,神经网络基础与应用
  20. Selenium2Library库中没有系统关键字select window by handle咋办?

热门文章

  1. hive concat_ws列转行排序问题
  2. 『杭电1897』SnowWolf‘s Wine Shop
  3. 不能理解命令行选项 “n”_如何理解命令行
  4. CRISPR最新:新CRISPR技术靶向更复杂的人类基因组代码
  5. AndrOid系统亭子运行,饼干智能好物开箱 篇二十二:给父母换个手机,让他成楼下凉亭的拍照KOL...
  6. NeRF 神经辐射场
  7. 基于微信公众平台的智能硬件/智能设备APP开发详解
  8. 基于Vue的WebApp项目开发(五)
  9. 路径详解(绝对路径,相对路径,根相对路径)
  10. 零基础快速入行入职软件测试工程师