Hello unity3d!

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

终于能够把文字显示出来了:


屏幕快照 2017-03-24 21.21.03.png

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


屏幕快照 2017-03-24 21.27.21.png

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


屏幕快照 2017-03-24 21.38.00.png

附上工程源码下载



作者:dumpling2017
链接:http://www.jianshu.com/p/a4e6d1ca3ca0
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
posted @ 2017-09-05 15:28  子非鱼`  阅读(2475)  评论(0编辑  收藏  举报
;