[toc]

# UGUI Text 扩展

比如需要在 Text 组件中实现下划线的功能,这个功能 UGUI 本身并不支持,所以需要自己去实现,实际上,在 UGUI 中对于一个组件进行定点都够早通常都是通过 OnPopulateMesh() 方法来进行的,接下来本文讲从 Text 组件触发来进行介绍

# 1. 如何控制组件的 Mesh 生成

首先 Text 组件会提供一个函数

1
2
3
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
2
3
TextGenerator underlineText = new TextGenerator();
underlineText.Populate("-", settings);
IList<UIVertex> lineVer = underlineText.verts;

其中 underlineText.verts 就是这个字符的四个顶点

# 如何制作下划线

  1. 生成顶点时记录所有顶点中的 minX,maxX,minY,maxY

  2. 使用 TextGenerator 在对应的字段下方生成一个面片
    然后在顶点下方生成一个矩形面片即可

# 拓展

其实字体的各种信息可以输入到 Shader 内

更新于

请我喝[茶]~( ̄▽ ̄)~*

Solvarg 微信支付

微信支付

Solvarg 支付宝

支付宝

Solvarg 贝宝

贝宝