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

BMFont

之前使用Cocos引擎的时候需要用到艺术字也就是将数字使用美术给的图片来代替显示,也就是要做一个新字体专门用来显示艺术字,当时用的是BMFont来制作字体。那么问题来了,在Unity下面的UGUI能否使用呢?答案当然是OK的啦。

下面我们来看下如何使用BMFont。

从网站https://www.angelcode.com/products/bmfont/下载并安装BMFont软件。

制作

我们通过菜单栏“Edit/Open Image Manager”来选择需要做艺术字的图片。

打开之后选择”Image/Import image“

点击”Browse“按钮选择数字0的png图片,然后在Id一栏填写该数字的Id也就是如下的箭头所示的48,即数字0的ASCII码。

点击OK就会将图片给导入进来。

导入的图片不显示

但是需要注意这个时候可能会出现点击之后Image Manager面板里面并没有出现刚才加载的图片。这里是美术给的图片格式不对,我们需要将png图片修改为PNG-24格式的。打开PS加载出对应点png图片,然后菜单栏选择“文件/存储为Web所用格式”。

在弹出的面板图中所示的位置选择PNG-24格式,点击存储即可。

我们依次添加完所有的数字png图片之后,在BMFont的菜单栏“Options/Export options”里面设置一下导出的参数。

图片的Width和Height可以自己根据里面的图片大小自己设置(设置好之后可以不必着急关闭窗口,在导出时候查看生产的所有的数字合并之后的图片大小是否合适,里面的数字排版是否紧凑。一开始设置大了或者小了,后面还可以修改大小,重新导出)。

下面的Font description 更改为XML,后面需要根据这个格式生成对应的字体文件。然后Texture格式设置为png。点击Ok即可。接下来就是回到BMFont的菜单栏选择“Options/Save bitmap font as…”即可保存出Score.fnt文件,同时生成的还有一个对应的png大图。

我们将生成的Score.fnt和Score_0.png一起放入Unity中,然后新建一个BitmapFontExporter.cs文件放入Unity的Editor目录,代码如下:

using UnityEngine;
using UnityEditor;
using System.IO;
using System.Xml;
using System;public class BitmapFontExporter : ScriptableWizard
{[MenuItem("BitmapFontExporter/Create")]private static void CreateFont(){ScriptableWizard.DisplayWizard<BitmapFontExporter>("Create Font");}public TextAsset fontFile;public Texture2D textureFile;private void OnWizardCreate(){if (fontFile == null || textureFile == null){return;}string path = EditorUtility.SaveFilePanelInProject("Save Font", fontFile.name, "", "");if (!string.IsNullOrEmpty(path)){ResolveFont(path);}}private void ResolveFont(string exportPath){if (!fontFile) throw new UnityException(fontFile.name + "is not a valid font-xml file");Font font = new Font();XmlDocument xml = new XmlDocument();xml.LoadXml(fontFile.text);XmlNode info = xml.GetElementsByTagName("info")[0];XmlNodeList chars = xml.GetElementsByTagName("chars")[0].ChildNodes;CharacterInfo[] charInfos = new CharacterInfo[chars.Count];for (int cnt = 0; cnt < chars.Count; cnt++){XmlNode node = chars[cnt];CharacterInfo charInfo = new CharacterInfo();charInfo.index = ToInt(node, "id");charInfo.width = ToInt(node, "xadvance");charInfo.uv = GetUV(node);charInfo.vert = GetVert(node);charInfos[cnt] = charInfo;}Shader shader = Shader.Find("Unlit/Transparent");Material material = new Material(shader);material.mainTexture = textureFile;AssetDatabase.CreateAsset(material, exportPath + ".mat");font.material = material;font.name = info.Attributes.GetNamedItem("face").InnerText;font.characterInfo = charInfos;AssetDatabase.CreateAsset(font, exportPath + ".fontsettings");}private Rect GetUV(XmlNode node){Rect uv = new Rect();uv.x = ToFloat(node, "x") / textureFile.width;uv.y = ToFloat(node, "y") / textureFile.height;uv.width = ToFloat(node, "width") / textureFile.width;uv.height = ToFloat(node, "height") / textureFile.height;uv.y = 1f - uv.y - uv.height;return uv;}private Rect GetVert(XmlNode node){Rect uv = new Rect();uv.x = ToFloat(node, "xoffset");uv.y = ToFloat(node, "yoffset");uv.width = ToFloat(node, "width");uv.height = ToFloat(node, "height");uv.y = -uv.y;uv.height = -uv.height;return uv;}private int ToInt(XmlNode node, string name){return Convert.ToInt32(node.Attributes.GetNamedItem(name).InnerText);}private float ToFloat(XmlNode node, string name){return (float)ToInt(node, name);}
}

然后我们在Unity的菜单栏选择“BitmapFontExporter/Creat”即可打开字体创建面板。

在打开的面板中将生成的XML文件和png大图拖拽进去,点击Create按钮即可生成Score字体。

在Unity中可以看到这张png大图里面的所有数字的排列紧凑程度,也就是上面提到的。

原理

Unity提供了一个自定义字体的方法,在Unity中右键“Create/Custom Font“会生成一个自定义的字体,不过需要我们手动去填写字体对应的材质球和Character Rects。size大小表示有多少个艺术字,然后要在每个Element里面的index填写字符对应的ASCII码,还要填写对应的UV和Vert。

不过这个过程相当繁琐,所以通过代码来完成这一步骤。原理很简单,就是将BMFont生成出来的XML配置文件读取出来,依次填写进去即可。

使用

在UGUI的Text组件里面选择刚才生成的字体拖拽进去即可,具体如下

参考:https://tedsieblog.wordpress.com/category/unity-ugui/

Unity UGUI 数字使用图片显示-BMFont相关推荐

  1. 基于STM32CubeMX的stm32f103c6t6液晶0.96OLED显示字母数字汉字图片显示

    在STM32CubeMX里建工程,利用HAL库stm32F103c6t6连0.96寸的OLED液晶显示数字字母汉字图片.stm32f103c8t6,stm32f103zet6系列都可以参考下面的即可成 ...

  2. unity UGUI与模型混合显示(ui显示特效)

    题外:一直想写点啥,可是总是些零碎的知识,弄不成一篇文章,有一种博客是别人的博客,还是得好好学习学习 前言:在做项目的时候会遇到将模型与UI混合编排,以前用ngui 的时候我记得是可以直接把模型放在其 ...

  3. Unity UGUI 用BMFont工具自制艺术数字字体超超超详细教程(附工具下载链接)

    效果如下 速度开始制作流程: 1. 导入BMFont代码到unity. 在unity资源文件夹根目录创建文件夹命名为Editor,Editor文件夹下面创建文件夹BMFont,将下载的BMFont压缩 ...

  4. 在NGUI使用图片文字(数字、美术字)(BMFont)

    在游戏开发过程中,我们大多数时候都需要显示游戏计时和分数等,而这些数字如果用普通的字体来显示又会显得不太好看,于是我们产生了用图片来制作自定义数字的需求 于是,在Unity中,一般会使用BMFont ...

  5. Unity UGUI 鼠标悬停一段时间显示Text文字

    Unity UGUI 鼠标悬停一段时间显示Text文字 using System.Collections; using System.Collections.Generic; using UnityE ...

  6. Unity UGUI 效果 之 UI 元素 多边形UI (例如雷达图,圆形,不规则多边形 UI等)显示 的简单实现的几种方法整理

    Unity UGUI 效果 之 UI 元素 多边形UI (例如雷达图,圆形,不规则多边形 UI等)显示 的简单实现的几种方法整理 目录 Unity UGUI 效果 之 UI 元素 多边形UI (例如雷 ...

  7. Unity+EasyAR4.1.0.811包,实现手机扫描图片显示模型(安卓手机)

    文章目录 一.关于EasyAR 1.搞Key 2.下载EasyAR包 二.Unity项目发布成Android手机apk文件 1.由PC平台切换到Android平台 2.下载并安装AndroidSDK ...

  8. Unity UGUI 之 实现 Text 文本文字过长,省略号显示(TextMeshPro 和常规 Text 二种方法)

    Unity UGUI 之 实现 Text 文本文字过长,省略号显示(TextMeshPro 和常规 Text 二种方法) 目录 Unity UGUI 之 实现 Text 文本文字过长,省略号显示(Te ...

  9. 【游戏开发实战】Unity UGUI Text图文混排(聊天文字混表情),支持动态表情,出招吧表情帝

    文章目录 一.前言 二.最终效果 三.具体使用 1.导入表情素材 2.设置图片格式 3.生成表情图集 4.UI-EmojiFont.shader 5.材质球 四.测试 五.结束语 一.前言 点关注不迷 ...

最新文章

  1. jsonhandle主界面没有显示格式_怎么将图纸导出成图片格式保存
  2. 【学习笔记】智能制造问与答
  3. python希尔排序的优缺点_Pythonの希尔排序
  4. 教你移除IE 7.0浏览器的默认搜索框
  5. HDU - 5017 Ellipsoid(三分套三分/模拟退火)
  6. SAP UI5 mock mode more discussion
  7. springcloud服务注册和发现
  8. 网络数据隐私保护,阿里工程师怎么做?
  9. Python int与string 的转换
  10. Linux链表list_head/hlist_head/hlist_nulls_head的并发性
  11. 【台大李宏毅机器学习】机器学习基本概念
  12. 微型计算机控制系统一般结构框图,微型计算机控制系统的组成-精品文档.ppt
  13. GPS控制网技术设计、技术设计书、作业模式
  14. Python学习笔记 TypeError: not all arguments converted during string formatting
  15. 数据同步,数据库实时迁移同步方案,数据库同步软件
  16. 谷歌地图(Google Maps)接入基础篇
  17. 主流的开源免费erp(至少十年以上历史)
  18. 无法为表空间 某某XX 中的段创建 INITIAL区
  19. 在Termux中安装Kali教程
  20. HTTP请求以及接收的方式

热门文章

  1. 小米商城项目分析(上)
  2. [stm32] 一个简单的stm32vet6驱动的天马4线SPI-1.77寸LCD彩屏DEMO
  3. 从IT时代转入DT时代 安防应该注意什么?
  4. DT时代安防如何挖掘数据的商业价值
  5. 漏洞扫描常见修复方案
  6. 带你从零玩转云服务器
  7. 高层货架一般需要计算机控制,自动化高层货架仓库的组成部分及其优点
  8. 怎样才算压倒性投入?
  9. bootstrap 文字图标 glyphicon class 不显示
  10. c语言bnd文件,Unix环境下嵌入式C程序编译