unity5.5 ugui使用美术字
文件转载自:http://www.jianshu.com/p/a4e6d1ca3ca0
项目需要使用美术字加强战斗效果表现,按以往NGUI的使用经验,这个应该很简单,随便Google一下都有数篇技术博客,比如这篇Unity教程之-UGUI美术字体的制作与使用。
按照博客操作了一遍,发现字体没有显示,然后又核对了一下流程,发现操作没问题,结果还是没有显示文字。经过一番折腾,原来是字体生成时使用的api在5.5版本已被弃用
ArtistFont.cs:
CharacterInfo info = new CharacterInfo();
info.index = bmInfo.index;
info.uv.x = (float)bmInfo.x / (float)mbFont.texWidth;
info.uv.y = 1 - (float)bmInfo.y / (float)mbFont.texHeight;
info.uv.width = (float)bmInfo.width / (float)mbFont.texWidth;
info.uv.height = -1f * (float)bmInfo.height / (float)mbFont.texHeight;
info.vert.x = (float)bmInfo.offsetX;
info.vert.y = (float)bmInfo.offsetY;
info.vert.width = (float)bmInfo.width;
info.vert.height = (float)bmInfo.height;
info.width = (float)bmInfo.advance;
CharacterInfo:
[Obsolete ("CharacterInfo.uv is deprecated. Use uvBottomLeft, uvBottomRight, uvTopRight or uvTopLeft instead.")]
public Rect uv;
[Obsolete ("CharacterInfo.vert is deprecated. Use minX, maxX, minY, maxY instead.")]
public Rect vert;
由于api被弃用,实际的字符信息并没有写入字体文件,这样当然不会显示字体了。
接下来的方向就是用uvBottomLeft, uvBottomRight, uvTopRight, uvTopLeft代替uv,minX, maxX, minY, maxY代替vert输出对应字符信息。目标是很明确,但过程非常曲折,折腾了很久还是没搞懂具体的写法,借助万能的Google,我找到了这篇文章Unity的UGUI中使用CustomFont(BMFont),上核心代码:
CharacterInfo info = new CharacterInfo();
info.index = id;
float uvx = 1f*x/texWidth;
float uvy = 1 - (1f*y/texHeight);
float uvw = 1f*width/texWidth;
float uvh = -1f*height/texHeight;
info.uvBottomLeft = new Vector2(uvx, uvy);
info.uvBottomRight = new Vector2(uvx + uvw, uvy);
info.uvTopLeft = new Vector2(uvx, uvy + uvh);
info.uvTopRight = new Vector2(uvx + uvw, uvy + uvh);
info.minX = xoffset;
info.minY = yoffset + height / 2; // 这样调出来的效果是ok的,原理未知
info.glyphWidth = width;
info.glyphHeight = -height; // 同上,不知道为什么要用负的,可能跟unity纹理uv有关
info.advance = xadvance;
看注释也知道该博主同样是一脸懵逼,但也还是很牛逼地把逻辑撸出来了。参考了这段代码,其实基本是照抄,那为啥是叫参考呢?因为还不能完全适用,要把代码改一下才能正确显示效果
info.minY = yoffset + height
终于能够把文字显示出来了:

兴奋呐!!!但是明明输入了5个0,为什么才显示一个数字呢???原来字符重叠了。。。继续万能的谷歌,我找到了相同问题的发帖[问答] unity5.3版本内UGUI制作美术字重叠怎么破,同样我也找到了一万头草泥马在内心狂奔的回答

还好有了之前UGUI图文混排的经验,继承Text修改顶点位置就能让字体正常显示

附上工程源码下载
作者:dumpling2017
链接:http://www.jianshu.com/p/a4e6d1ca3ca0
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
unity5.5 ugui使用美术字的更多相关文章
- unity5, UGUI刺穿问题解法
我希望在touch屏幕时player起跳,于是在playerControl.cs的Update函数中添加如下touch代码: if (Input.GetMouseButtonDown (0)) {/ ...
- 如何快速优化手游性能问题?从UGUI优化说起
WeTest 导读 本文作者从自身多年的Unity项目UI开发及优化的经验出发,从UGUI,CPU,GPU以及unity特有资源等几个维度,介绍了unity手游性能优化的一些方法. 在之前的文 ...
- uGUI练习(六) ScrollView
练习目标 练习uGUI的滑动组件 一.相关组件 ScrollRect Mask Grid Layout Group Scrollbar 二.步骤 1.创建一个Panel,命名为ScrollRect,添 ...
- uGUI练习 开篇
一.准备阶段 1.Unity 4.6 Beta b18或更高版本(注:目前泄露版的Unity5.0Beta 对UI的支持并没有4.6 Beta那么好) 2.了解 Unity 2D Sprite的基础知 ...
- Unity NGUI和UGUI与模型、特效的层级关系
目录 1.介绍两大UI插件NGUI和UGUI 2.unity渲染顺序控制方式 3.NGUI的控制 4.UGUI的控制 5.模型深度的控制 6.粒子特效深度控制 7.NGUI与模型和粒子特效穿插层级管理 ...
- Unity使用UGUI进行VR游戏的界面开发
原文链接:http://gad.qq.com/article/detail/7181505 本文首发腾讯GAD开发者平台,未经允许,不得转载 我不知道有多少同学是跟我一样,在开发VR游戏中,是使用的面 ...
- UGUI的text赋值问题-速度
仅是简单的给一个ugui.text组件不断的赋值字符串,就会带来很高的CPU消耗,约0.5MS左右. 这个过程主要是消耗在字体的MESH顶点重建. 在游戏中变化的字体一般不多,聊天面板虽然变化,刷新率 ...
- 基于Shader实现的UGUI描边解决方案
基于Shader实现的UGUI描边解决方案 前言 大扎好,我系狗猥.当大家都以为我鸽了的时候,我又出现了,这也是一种鸽.创业两年失败后归来,今天想给大家分享一个我最近研究出来的好康的,比游戏还刺激,还 ...
- Unity GUI(uGUI)使用心得与性能总结
Unity GUI(uGUI)使用心得与性能总结 作者 kingshijie 关注 2015.09.26 15:35 字数 3686 阅读 28031评论 10喜欢 49 背景和目的 小哈接触Unit ...
随机推荐
- thinkphp 视图(二)变量输出、赋值和替换
view下的html文件会编译成php文件 编译的文件在runtime 下的temp目录 <p>{$email}</p> 会编译成 <?php echo $email; ...
- 配置apache虚拟域名(phpStudy2016)
以前也一个个的配置过apache.php和mysql,现在嫌麻烦,就用的phpStudy. 装好之后,发现127.0.0.1可以访问,但是localhost就不可以访问.大概是因为apache没有配置 ...
- 使用git开发的流程
1.git常用的主干,分支命令 查看分支 git branch 或者 git branch -v A) 创建分支 git branch Dev_samples_V1.0.0 B) 切换分支 git c ...
- Verilog HDL小练习
5s内15Hz4个LED闪烁,再两秒熄灭,循环往复. 引入en,可以使得4个LED灯全亮,以及恢复周期变化. module led(clk_27MHZ, en, led1, led2, led3, l ...
- 查看memcached连接数
netstat -n | grep : | wc -l
- ABP Quartz 作业调度第三篇
1.第一步安装Abp.Quartz ,把他安装到核心层 核心模块添加对quarz的依赖, 领域层创建firstjob类 public class FirstJob : JobBase, ITransi ...
- python 练习1
题目: 1.输入用户名密码2.认证成功后显示欢迎信息3.输错三次后锁定 #!/usr/bin/env python import sys,pickle account = {'wyh':123,'cl ...
- 2019.02.21 bzoj2829: 信用卡凸包(凸包)
传送门 题意:给nnn个A∗BA*BA∗B的矩形,其中每个矩形的四个角被改造成了半径为rrr的四分之一 圆,问这些矩形的凸包周长. 思路:考虑求出圆心的凸包周长然后加上一个整圆的周长,证明很简单,略掉 ...
- APP微信支付报错《商户号该产品权限未开通,请前往商户平台>产品中心检查后重试》
问题 最近项目使用MUI,HBuilder.开发打包H5的app 在开发H5 plus支付的时候,遇到以下问题: App微信支付调官方的统一下单接口返回错误信息 {return_msg=商户号该产品权 ...
- 1024 Palindromic Number int_string转换 大整数相加
A number that will be the same when it is written forwards or backwards is known as a Palindromic Nu ...