项目有遇到Text字间隔的问题 可惜ugui原生不支持 参考网络上的脚本做了一版
效果
思路
1.依赖内置的cachedTextGenerator,通过其生成的每行数据取得对应的Vertex初始点并在生成顶点时对每个有效字体的六个顶点进行偏移操作.
2.对于富文本组件需要在生成Vertex节点时使用正则表达式提取忽略的Vertex初始点.
3.ContentSizeFitter组件需要获取PreferedWidth,TextGenerator.生成数据的最大行数算出额外Width与基础Width叠加
脚本
可以直接放到项目里使用
1.由于覆写Text 使用时请添加UIT_TextExtend而不是Text
using UnityEngine.UI;
using UnityEngine;
using System.Collections.Generic;
using System.Text.RegularExpressions;
[AddComponentMenu("UI/Text_Extend",0)]
public class UIT_TextExtend : Text
{
public int m_characterSpacing;
//正则表达式参数
private const string m_RichTextRegexPatterns = @"<b>|</b>|<i>|</i>|<size=.*?>|</size>|<Size=.*?>|</Size>|<color=.*?>|</color>|<Color=.*?>|</Color>|<material=.*?>|</material>";
//ContentSizeFitter的PreferdWidth获取
public override float preferredWidth
{
get
{
//获取初始宽度
float preferredWidth= cachedTextGenerator.GetPreferredWidth(text, GetGenerationSettings( Vector2.zero));
//根据生成的有效初始顶点数据获得最大行数的初始顶点数量
List<List<int>> linesVertexStartIndexes = GetLinesVertexStartIndexes();
int maxLineCount = 0;
for (int i=0;i<linesVertexStartIndexes.Count;i++)
maxLineCount = Mathf.Max(maxLineCount, linesVertexStartIndexes[i].Count);
return preferredWidth + m_characterSpacing * (maxLineCount - 1);
}
}
//定点生成覆写
//当前使用的字数像素偏移方案为(字数*偏移值) 请根据需求自行配置
protected override void OnPopulateMesh(VertexHelper toFill