Unity3D UGUI Text 文本字间距( 支持RichText、Warp换行与PreferedWidth)

本文介绍了如何解决Unity3D UGUI中Text组件不支持字间距的问题,通过自定义脚本实现字间距调整,同时支持RichText、Warp换行和PreferedWidth。详细讲解了实现思路,包括利用cachedTextGenerator获取顶点信息并进行偏移,处理富文本的特殊需求,以及与ContentSizeFitter组件的配合。提供了可以直接使用的脚本,并说明了使用注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Unity3D UGUI 字间隔

项目有遇到Text字间隔的问题 可惜ugui原生不支持 参考网络上的脚本做了一版

效果

Text Extend效果图在这里插入图片描述

思路

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值