[toc]
# UGUI Text 扩展
比如需要在 Text 组件中实现下划线的功能,这个功能 UGUI 本身并不支持,所以需要自己去实现,实际上,在 UGUI 中对于一个组件进行定点都够早通常都是通过 OnPopulateMesh()
方法来进行的,接下来本文讲从 Text 组件触发来进行介绍
# 1. 如何控制组件的 Mesh 生成
首先 Text 组件会提供一个函数
1 | protected override void OnPopulateMesh(VertexHelper toFill) |
VertexHelper
是最终该文本组件要输出的 Mesh 相关的信息 (如,顶点,索引,法线等) 值得注意的是,VertexHelper 其实提供了很多方便填充 Mesh 的方法,比如 AddUIVertexQuad
可以直接将带有四个顶点数据的 UIVertex 填充到 VertexHelper 中。所有的填充操作只需要在 VertexHelper 中进行即可 默认的方法最终生成的 mesh 如下图所示:
# 字体贴图
如果我们把.ttf 的字体文件导入到 Unity 中,我们可以看到生成了一个材质和一个贴图 其中字体在生成的 mesh 中使用 TextGenerator 可以根据索引对应到每个文字,每个文字通过 UV 坐标可以直接将对应的字体作为贴图显示在 mesh 之上。 所以,其实实际上我们只需要通过控制每个字体 mesh 的形状与位置就可以控制整个文本的显示
# TextGenerator
TextGenerator 主要是负责找到对应文字在贴图中的 UV 坐标,然后将其的基本信息构建出来,返回一个 UIVertex 数组,这个数组包含四个顶点 比如想用 _
来作为下划线,就可以创建如下的 TextGenerator
1 | TextGenerator underlineText = new TextGenerator(); |
其中 underlineText.verts
就是这个字符的四个顶点
# 如何制作下划线
-
生成顶点时记录所有顶点中的 minX,maxX,minY,maxY
-
使用 TextGenerator 在对应的字段下方生成一个面片
然后在顶点下方生成一个矩形面片即可
# 拓展
其实字体的各种信息可以输入到 Shader 内