UGUI运用美术字体

在游戏的制作中,美术字的运用是美化游戏的常用手段。比如普攻,暴击打出的战斗飘字就常常利用不同的美术字来做出区别。那么在Unity中如何把美术字运用起来呢?且看下文:

1、道具准备。
BMFont:位图字体制作工具。这是我收藏的一个,下载地址:http://pan.baidu.com/s/1pKs8bMz
安装好之后,打开位图字体制作工具,长这样的:

菜单栏上单击 Edit -> Open Image Manager

打开之后长这样的:

再单击 Image -> Import image,把你要做成位图字体的图片依次导入进来。

注意下这个:
这个Id填的是你导入数字的ASCII,我导入的是 数字 “0” 所以我填48。
每当你成功导入一个数字,在背后的字符面板相应数字框的右下角都会有一个亮起的小点点。

或许你像我一样很懒,觉得这样导入好累好蠢。那你可以马上把这软件关了,然后打开 位图制作工具的安装目录并找到名为:bmfont.bmfc 的文件

用你喜欢的文本编辑器打开它。打开后它是长这样的:

细心的你肯定发现了最后一行的内容,这记录了我刚才导入的数字图片的位置,和一些信息。之后你就会 Ctrl + C,Ctrl+V,。。。,。。。,。。。Ctrl + S,然后这个文件就长这样了:(别问我为什么只弄了两个,懒)

在打开工具你就会发现

这两个数字已经被成功导入了。(别问为什么,反正偷懒的目的达到了就行)
到此,我需要的 0,1,2数字都已经完全导入,接下来就是要导出。
导出之前先要设置一些参数

设置完了之后:

给好名字后将得到两个文件:

这样我们的位图字体就制作完成了。接下来让我们把这位图字体运用到UGUI的Text控件里去。
2、应用位图字体

把刚才得到的两个文件导入到unity合适的目录中。
先在Unity里创建一个自定义字体MyFont,和一个空的材质球MyFont,材质球的shader用UI/Default Font。

只要我们把MyFont里的Default Material 和 Character Rects 用上我们刚制作好的字体信息即可。下面写代码验证:

using UnityEngine;
using System.Collections.Generic;
using UnityEditor;
using System.IO;
using System.Xml;public class BMFont {[MenuItem("Tools/Font")]static void Font(){Material mtr = Resources.Load<Material>("Fonts/MyFont"); //把我们创建的材质球加载进来Texture2D texture = Resources.Load<Texture2D>("Fonts/MyFont_0"); //把我们在位图制作工具生成的图片加载进来mtr.SetTexture(0, texture);//把图片赋给材质球Font font = Resources.Load<Font>("Fonts/MyFont"); //把我们创建的字体加载进来XmlDocument xml = new XmlDocument();xml.Load(Application.dataPath + "/Resources/Fonts/MyFont.fnt");//这是在BMFont里得到的那个.fnt文件,因为是xml文件,所以我们就用xml来解析List<CharacterInfo> chtInfoList = new List<CharacterInfo>();XmlNode node = xml.SelectSingleNode("font/chars");foreach (XmlNode nd in node.ChildNodes){XmlElement xe = (XmlElement)nd;int x = int.Parse(xe.GetAttribute("x"));int y = int.Parse(xe.GetAttribute("y"));int width = int.Parse(xe.GetAttribute("width"));int height = int.Parse(xe.GetAttribute("height"));int advance = int.Parse(xe.GetAttribute("xadvance"));CharacterInfo chtInfo = new CharacterInfo();float texWidth = texture.width;float texHeight = texture.width;chtInfo.glyphHeight = texture.height;chtInfo.glyphWidth = texture.width;chtInfo.index = int.Parse(xe.GetAttribute("id"));//这里注意下UV坐标系和从BMFont里得到的信息的坐标系是不一样的哦,前者左下角为(0,0),//右上角为(1,1)。而后者则是左上角上角为(0,0),右下角为(图宽,图高)chtInfo.uvTopLeft = new Vector2((float)x / texture.width, 1 - (float)y / texture.height);chtInfo.uvTopRight = new Vector2((float)(x + width) / texture.width, 1 - (float)y / texture.height);chtInfo.uvBottomLeft = new Vector2((float)x / texture.width,1 - (float)(y + height) / texture.height);chtInfo.uvBottomRight = new Vector2((float)(x + width) / texture.width,1 - (float)(y + height) / texture.height);chtInfo.minX = 0;chtInfo.minY = -height;chtInfo.maxX = width;chtInfo.maxY = 0;chtInfo.advance = advance;chtInfoList.Add(chtInfo);}font.characterInfo = chtInfoList.ToArray();AssetDatabase.Refresh();}
}

好的,代码写好了,就可以到Unity里验证了(以上代码仅是验证代码,请捡而用之)。切回Unity,点击 Tools/Font

再看看我们刚创建的材质球

说明图片已给上。和字体MyFont

MyFont的Character Rects信息也有了,再把材质球拖到MyFont的Default Material中

到此,一切就准备就绪了,激动时刻到来了。在Hierarchy里创建一个Text控件

并把MyFont拖到Text的Font中

修改文本为 0~2的数字(因为就只做了0,1,2),并把Text的颜色值调到最左上角,效果出现了

完了!!!!
(接下来研究研究BMFont的使用命令行来制作字体,这样就可以完全自动化了,充分解放本人的懒惰基因。有成果了放出来)

unity测试版本:5.3.0f4

UGUI运用美术字体相关推荐

  1. 【UGUI】美术字体的制作与使用

    原文:http://www.unity.5helpyou.com/3211.html 游戏制作中,经常需要使用各种花哨的文字或者数字,而字体库往往不能达到我们需要的效果,因此需要一种用图片替代文字的功 ...

  2. Unity教程之-UGUI美术字体的制作与使用

    文章转载自:http://www.unity.5helpyou.com/3211.html 游戏制作中,经常需要使用各种花哨的文字或者数字,而字体库往往不能达到我们需要的效果,因此需要一种用图片替代文 ...

  3. 【Unity UGUI】简单的美术字体的制作(教你写插件)

    在 unity UGUI 使用中我们常常用到美术字体,然而有时却没有那么复杂那么多,再此介绍下生成美术字体的原理 选中预先制作好的图片 点击Go 就可以生成一个简单的字体了 使用也很简单 要注意设置( ...

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

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

  5. Unity3d之-使用BMFont制作美术字体

    一.需求 游戏开发中经常遇到需要以美术字(而非字库)做数字显示的情况,通常美术会提供一组包含单个数字(也会有其它字符)的图片,可能是一张整图,也可能是每个数字分开的散图. 在此我以一张整图这种情况为例 ...

  6. [UnityUI]美术字体的制作与使用

    原文链接:http://www.redblack.cn/?p=107 1.让美术提交分块后的文字: 2.打开BMFont工具,找到图片管理(Edit->Open Image Manager): ...

  7. Egret 使用Texture Merger制作美术字体

    在游戏中,有时候美术为了显示更好的字体效果,美术会自己制作字体,让程序显示出来,如何实现显示美术给的美术字体效果呢.程序可以使用美术导出图片,自己使用代码组合起来使用(效率低下,程序繁琐).或者是使用 ...

  8. unity中美术字体的制作

    unity中美术字体的制作 本次总结:客户端制作美术字体.我已知的两种方式:1.FontSetter插件.2.BMFont工具.这里比较推荐第一种插件,方便.快捷.简单. FontSetter插件 F ...

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

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

最新文章

  1. GCC编译选项--创建与使用库
  2. centos 6.0 启动失败提示。
  3. Windows 7 X64平台编译LLVM+clang
  4. python正则表达式指南_Python正则表达式指南(转)
  5. 在项目中谨慎为系统类添加分类!!!!!
  6. 使用这个库,让你的服务操作 Redis 速度飞起
  7. Android手机编程初学遇到的问题及解决方法
  8. Cesium Workshop
  9. python中关于字典的基础运用
  10. 【Linux】Windows 10 安装应用商店 ubuntu 终端后访问本地文件
  11. completion time, flow time和processing time 区别
  12. 活在迷茫中,不是活在当下
  13. [JNI]开发之旅(9)JNI函数字符串处理
  14. FLTK学习笔记4-在FLTK中显示图片(上)
  15. java服务器动态打包apk
  16. oracle设置默认角色,oracle的用户和角色管理
  17. 计算机电源功率高好吗,电脑电源买多大功率适合?实战分析分享
  18. html5圆圈,圆形按钮HTML5/CSS3 button代码
  19. mysql同时查两张表数据库表_sql语句 同时查询两个表
  20. html里怎么计算梯形周长公式是什么,梯形的周长公式是什么

热门文章

  1. 纯js 消灭星星游戏,js 消灭星星游戏实现原理,有道具的消灭星星
  2. Leetcode 957. N 天后的牢房 循环节
  3. WPF中MsgBox的弹出会中断路由事件的传递
  4. 我们如何才能打造个人品牌?
  5. 如何获得ESP32-WROOM-32技术规格书
  6. 无盘服务器怎么设置客户端启动,网吧无盘客户端配置向导
  7. 中国石油大学《化工设计概论》第三阶段在线作业
  8. 一款桌面英语翻译软件介绍
  9. Docker部署Emqx并配置ssl支持微信小程序
  10. 2019淘宝自动静默关注店铺,在线生成