1. UILabel简介

(1)UILabel支持类型

a.图字:是指根据某些工具,将游戏中需要用到的文字渲染到一张纹理上,并附其纹理信息(包括 id值,尺寸,间距等)。

b.字库字:是指直接载入ttf等字库文件,根据从ttf文件中读取的数据,生成纹理并渲染。

(2)UILabel基本属性

Font类型:上述介绍的图字和字库字(Bitmap与Dynamic)

Text:文本

Overflow:溢出时选项,包括所发,裁剪,扩充等

Spacing:间距

Max Lines:最大行数

Encoding:是否支持颜色和表情

Gradient:(默认关闭),颜色渐变效果

Effect:特效,包括描边,阴影

(UIWidget属性不在赘述)

2. UILabel 绘制

UILabel根据类型不同(图字,字库字),其组织顶点,uv,颜色的方式有所区别,主要区别在于字库字是Unity3d支持的,图字是NGUI实现的,过程大同小异,这次用图字举例,即UIFont(字库字请参考NGUIText.cs)

(本文不详细讨论NGUI中控件是怎样通过组织DrawCall顶点属性并渲染的,留到UIPanel和UIWidget中去分析,这里主要分析一下UILable是怎么组织顶点属性的)

(1)原理

本文以图字模式举例,前面已经介绍过了,图字的原理是将UI中所需要的文字合成到同一张纹理(也可以是多张),并附其每个字符的描述信息,目的在于渲染时可以得到文字的“uv”,根据属性中设置的位置确定其顶点“位置”,然后对其颜色属性的设置,可以确定每个顶点的“颜色”信息,这样,就满足了Shader对于顶点属性的基本要求,即位置,uv,颜色。

对于图字模式来说,其实和2d中常用的SpriteSheet很类似,只不过SpriteSheet中每个元素是Sprite帧,而图字纹理中是每个可能用到的字符。

(2)实现

图字模式的组织顶点属性的方法在

UIFont.Print(string text, BetterList<Vector3> verts, BetterList<Vector2> uvs, BetterList<Color32> cols)

(具体请参考源码,这里只给出步骤)

a.对于UILable中属性进行初始化赋值及简单元算,包括顶点属性(位置,uv,颜色),解析(颜色和表情)。

b.遍历文本中的每个字符,组织其顶点属性

c.先获取当前字符的BMSymbol信息(前文提到的字符描述信息)

d.位置:在原位置基础上加上偏移,宽高值(来源于BMSymbol,是生成图字纹理时设置生成的,对于每个字符不同)

e.uv:同上,根据BMSymbol

f.颜色:这个属性是根据在UILabel面板中的设置而来的,即前文设置的Gradient Bottom和Gradient Top,这里需要注意的是每个字符的高度不同,从而导致字符所在矩形的上下边界点颜色并不与设置Gradient Bottom和Gradient Top完全相同,而是根据字符的高度和行高插值出来的!代码如下

3. UILabel 中的 Gradient

效果如图

设置如第一幅图,Gradient Bottom设置为纯绿色(0,1.0,0,1.0f),Gradient Top设置为纯红色(1.0f,0,0,1.0f)。(PS: 只为举例,不代表个人审美)

其实相对于UILable的绘制,添加Gradient属性并不是什么难事,之前的NGUI只支持纯色(但是可变颜色)的文本,添加Gradient属性之后,即对字符的颜色根据字符信息,定位每个字符的颜色变化值(不是精确的属性中设置的纯绿色和纯红色,因为每个字符的高度不同,所以字符最上面和最下面的颜色为纯绿色和纯红色之间的某个值而不同),再由Shader插值出渐变的颜色效果。

NGUI之UILabel颜色渐变效果相关推荐

  1. html5做文字颜色渐变代码,神奇!js+CSS+DIV实现文字颜色渐变效果_javascript技巧

    本文实例为大家分享了DIV+CSS+JS实现的文字颜色渐变效果,供大家参考,具体内容如下 下面是 CSS 部分代码: body{ font:12px/1.5 Microsoft Yahei;}h3{ ...

  2. Android 字体颜色渐变效果 Span实现

    Android 实现字体颜色渐变效果 废话留在后面直接上代码 public class LinearGradientFontSpan extends ReplacementSpan {private ...

  3. 在VC中用GDI+绘制角度可变的颜色渐变效果-.NET教程,VB.Net语言[转]

    在VC中用GDI+绘制角度可变的颜色渐变效果-.NET教程,VB.Net语言 作者:网友供稿 点击:4 gdi+ 是gdi(windows 早期版本提供的图形设备接口)的后续版本,是microsoft ...

  4. JS获取颜色渐变效果数组

    JS获取颜色渐变效果数组 function rgbToHex(r,g,b){var hex = ((r << b) | (g << 8) | b).toString(16)re ...

  5. java按钮鼠标经过渐变_JavaScript实现的鼠标响应颜色渐变效果完整实例

    本文实例讲述了JavaScript实现的鼠标响应颜色渐变效果.分享给大家供大家参考,具体如下: 运行效果图如下: 完整代码如下: /p> "http://www.w3.org/TR/x ...

  6. CSS:实现动态流光线条效果/动态流光线条颜色渐变效果

    需求描述: 需要实现类似下图中的动态流光线条效果: 思路: 提到这种动态绘制矢量图形的需求,一般会想到使用canvas:由于笔者不太熟悉canvas动画也可以考虑用CSS来实现,这里先记录使用CSS实 ...

  7. eCharts实现颜色渐变效果环形图

    之前我尝试了Element-ui的环形进度条实现颜色渐变效果 这个对eCharts来说简直就是小case. 完成之后的效果图如下: 对应的页面源代码如下: <template><di ...

  8. android 渐变的背景色,Android开发——实现背景颜色渐变效果-Go语言中文社区

    前言 在Android开发当中,我们肯定会接到有业务需求是:让APP的某一些背景颜色产生渐变效果.那我们应该怎么去实现呢?接下就是我要为大家介绍的了. 效果图 这是需求要达到的效果.接下来说一下是怎么 ...

  9. jquery html渐变效果,jQuery实现字体颜色渐变效果的方法

    本文实例讲述了jQuery实现字体颜色渐变效果的方法.分享给大家供大家参考,具体如下: jQuery不允许css属性值为非数字的属性进行动画处理, 比如.animate(color:'red',500 ...

最新文章

  1. 关于delphi中的register, pascal, cdecl, stdcall, safecall
  2. android中内存泄露,Android中的内存泄露
  3. JS关闭窗口兼容Firefox、Chrome、IE(二次总结后)
  4. opencv相机标定和人头姿态估计案例
  5. android uinput 按键_android 使用uinput模拟输入设备的方法
  6. html怎么帮图片占位,css+html实现Skeleton Screen 加载占位图动画效果(带动画)
  7. web项目搜索框智能提示
  8. 24、List三个子类的特点
  9. 验证身份证的所在地址和前6位号码
  10. 浏览器地址栏和标题栏显示的小图标
  11. 考CFA证书只通过一级有用吗?
  12. 获取中国气象台卫星云图
  13. 解决Access denied for user ''@'localhost' to database 'mysql'问题
  14. 计量模型 | 固定效应与交互固定效应
  15. Newton Interpolation
  16. vue 项目打印时去掉页眉页脚
  17. 银行业掀起RPA风潮丨RPA应用于银行业9大场景
  18. SQL注入靶场:辛巴猫舍
  19. 爬虫学习笔记--爬取静态网页
  20. 基于cling2.0的Android DLNA/Upnp客户端基本开发成功

热门文章

  1. 3D建模需要学多久可以学会?自学能就业吗
  2. 图像几何变换之放大缩小(MATLAB)
  3. android仿微博首页布局,Android仿微博首页Tab加号弹窗功能
  4. 液位传感器的功能特点、技术参数及应用
  5. Android系统信息与安全机制
  6. 计算机专业小学期实验心得,小实验作文心得最新5篇
  7. GMap 鼠标拖拽与单击冲突问题以及按下鼠标移动Marker
  8. java 快捷键替换_java 快捷键替换
  9. 打印 九九乘法表 九九口诀表
  10. 计算机专业毕业生在个人简历上计算机水平怎么写,计算机专业简历范文_非计算机专业毕业生在个人简历上“计算机水平”怎么写...