主要步骤:

1.新建一个字体。

2.新建一个材质。


3.把上一步新建的材质赋值给第一步创建的字体。

4.设置字体的Character Rects的大小来划分字体。
例如划分这个图片,因其要分为12个字体所以Character Rects大小为12:


Character Rects中每个单元格的计算方式如图所标记(比较的复杂,了解怎么计算就行,后期通过编辑器可以计算出来。)

5.把设置好的字体直接赋值给Text中的Font,在Text中输入对应字体便可显示了。

标题上述制作字体设置参数比较繁琐,可以直接用编辑器一键生成字体和材质。编辑器代码如下。
public class ImageFontMaker
{[MenuItem("Assets/CreateImageFont")]static void CreateImageFont() {if ( Selection.objects == null  ) { return; }for (int i = 0; i < Selection.objects.Length; i++){if (Selection.objects[i].GetType() == typeof(Texture2D)) {CreateImageFont(Selection.objects[i] as Texture2D);}}}public static void CreateImageFont( Texture2D texture ) {if ( texture == null ) return;string texturePath = AssetDatabase.GetAssetPath(texture);string textureExtension = Path.GetExtension(texturePath);string filePath = texturePath.Remove(texturePath.Length - textureExtension.Length);string matPath = filePath + ".mat";string fontPath = filePath + ".fontsettings";Font myFont = AssetDatabase.LoadAssetAtPath<Font>(fontPath);if ( myFont == null ) {myFont = new Font();// 设置材质 Material mat = new Material(Shader.Find("GUI/Text Shader"));mat.SetTexture("_MainTex", texture);AssetDatabase.CreateAsset(mat, matPath);myFont.material = mat;AssetDatabase.CreateAsset(myFont, fontPath);}// 设置字符信息Sprite[] sprites = LoadSpritesByPath(texturePath);if (sprites.Length == 0 ) return;CharacterInfo[] characterInfos = new CharacterInfo[sprites.Length];for (int i = 0; i < characterInfos.Length; i++){characterInfos[i] = new CharacterInfo();// 设置 ascii 码  characterInfos[i].index = sprites[i].name[sprites[i].name.Length - 1];// 设置 字符 uv Rect rect = sprites[i].rect;characterInfos[i].uvBottomLeft = new Vector2( rect.x / texture.width , rect.y / texture.height);characterInfos[i].uvBottomRight = new Vector2((rect.x +rect.width) / texture.width, rect.y / texture.height);characterInfos[i].uvTopRight = new Vector2((rect.x + rect.width) / texture.width, (rect.y + rect.height) / texture.height);characterInfos[i].uvTopLeft = new Vector2(rect.x / texture.width,(rect.y + rect.height) / texture.height);// 字符的偏移 和 宽高 characterInfos[i].minX = 0;characterInfos[i].maxX = (int)rect.width;characterInfos[i].minY = 0 - (int)sprites[i].pivot.y;characterInfos[i].maxY = (int)rect.height - (int)sprites[i].pivot.y;characterInfos[i].advance = (int)rect.width;}myFont.characterInfo = characterInfos;EditorUtility.SetDirty(myFont);AssetDatabase.SaveAssets();AssetDatabase.Refresh();}public static Sprite[] LoadSpritesByPath(string path) {List<Sprite> sprites = new List<Sprite>();Object[] objects = AssetDatabase.LoadAllAssetsAtPath(path);foreach (var item in objects){if ( item.GetType() == typeof(Sprite) ) {sprites.Add(item as Sprite);}}return sprites.ToArray();}}

编辑器使用方法:选中要生成字体的Texture 右键选择CreateImageFont即可生成对应字体和材质。

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

  1. Unity中制作自定义字体的两种方式

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

  2. Unity中制作游戏的快照游戏支持玩家拍快照

    Unity中制作游戏的快照游戏支持玩家拍快照 有些游戏支持玩家"拍快照",也就是将游戏的精彩瞬间以图片的形式记录下来的功能.这个功能比较有趣,而且以后的用途也会很广,为此本节打算介 ...

  3. 在Unity中制作高质量的光照效果(上)

    原创: Unity Unity官方平台 本篇专家指南将介绍在Unity中制作高质量光照效果的多种高级方法,其中使用了2D和立方体贴图的光线遮罩,并且利用了Unity高清渲染管线HDRP中的高级着色器. ...

  4. 在Unity中制作4种不同的游戏

    流派:电子学习| MP4 |视频:h264,1280×720 |音频:AAC,48.0 KHz 语言:英语+中英文字幕(根据原英文字幕机译更准确)|大小解压后:8.6 GB 含课程素材 |时长:15h ...

  5. [教程] 在Unity中制作物体破碎效果

    这篇教程将教大家如何在Unity中制作一个简单的碎片效果.当物体撞击或销毁时,我们将物体分裂为更小的碎片来取代之前的仅仅直接"删除"物体. 需求 这篇教程需要最新版本的Unity, ...

  6. 如何在unity中制作塔防游戏

       塔防游戏非常流行,毫无疑问--没有什么比看着自己的防御消灭讨厌的侵略者更让人满足!在这两部分教程中,用unity来制作一个塔防游戏! 将会学习怎样...... 创建一波敌人 让它们跟随线路点 ...

  7. 在Unity中制作完整的技能系统(介绍篇)

    在Unity中制作完整的技能系统(介绍篇) 大噶吼呀,还是我暴躁老哥酒九.最近的我遇到了游戏荒,于是我就重新去玩了玩<英雄联盟>,结果发现还是一如既往的强了(不是).对于这款游戏我就不用多 ...

  8. unity 字体width_Unity中制作自定义字体

    使用Unity中的Sprite.Unity支持把一个Sprite切割成多个. 需要手动做的工作是将图集的TextureType设置为Sprite,然后把SpriteMode设为Multiple,打开S ...

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

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

  10. 关于Unity中的NGUI字体

    NGUI字体类型 1: UIFont字体,UIFont类实现的 2: TTF动态字体的使用 3: BBCode的特殊字体的使用 4: NGUI字体制作 5: BMFont字体制作和艺术字体的制作 6: ...

最新文章

  1. 使用jquery在新窗口中打开外部链接
  2. cad线性标注命令_CAD线性标注如何使用的
  3. 【转】彻底理解cookie,session,token
  4. springboot+mybatis实现动态切换数据源
  5. 一步一步写算法(之查找)
  6. python人脸识别要怎么实现_详解如何用OpenCV + Python 实现人脸识别
  7. Odoo14免费开源ERP实施手册:销售功能高级应用
  8. 心理测评全系统设计与代码实现
  9. JavaScript之Ajax(一篇入门Ajax就够了)
  10. 乖离性暗机器人_乖离性百万亚瑟王超弩级暗机器人复刻攻略分享
  11. 打印机多少钱一台?购买打印机打印速度快吗
  12. 金工计算机测试题,金工考试题精选.doc
  13. HTML中的meta标签
  14. 生死看淡,不服就GAN(八)----WGAN的改进版本WGAN-GP
  15. RK3288 资源汇总
  16. Vue项目中设置背景图片
  17. python俄罗斯方块小游戏实验报告,童年的记忆——如何用python写一个俄罗斯方块小游戏!...
  18. 物联网平台搭建教程01
  19. 加速度传感器灵敏度的几种表示方式
  20. excel快速拆分数据的方法

热门文章

  1. 高数 不定积分 欧拉代换
  2. 反馈抑制器设计的技术要点
  3. 苹果处理器性能排行榜天梯图2022 苹果处理器排行榜2022
  4. 如何辩证看待技术与业务的关系
  5. 我所理解的网络游戏一:网游的顶层设计
  6. java讲师助理面试题_面试Java开发师常问到的5个问题(附答案)
  7. wp兼容了android应用程序,WP兼容了Android应用 微软的春天就来了?
  8. 关于网络直播营销活动监管中的《广告法》
  9. 万用表欧姆档和摇表的区别
  10. kappa一致性检验教程_一致性检验的几种方式--ICC、kappa、weighted kappa、Kendall