You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Vertical Layout Group中各TextMesh Pro文本对象均匀缩放并同字号?

嘿,我来帮你搞定这个TMP自动字号统一的问题!结合你用的Unity 5.6.5f1和TMP 1.0.56.0b3版本,下面是几个实用的解决方案:

方案1:运行时同步统一字号

因为每个TMP文本的Auto-Sizing是独立计算的,我们可以先让所有文本完成自动缩放计算,再统一锁定到同一个字号。具体操作如下:

  • 给Vertical Layout Group的父物体添加一个管理脚本,代码示例如下:
using UnityEngine;
using UnityEngine.UI;
using TMPro;

public class SyncTMPUniformSize : MonoBehaviour
{
    void Start()
    {
        // 强制刷新布局,确保Auto-Sizing完成字号计算
        LayoutRebuilder.ForceRebuildLayoutImmediate(GetComponent<RectTransform>());
        // 延迟一小段时间执行,避免布局还没完全更新
        Invoke(nameof(ApplyUniformFontSize), 0.1f);
    }

    void ApplyUniformFontSize()
    {
        TextMeshProUGUI[] allTmpTexts = GetComponentsInChildren<TextMeshProUGUI>();
        float targetFontSize = 0;

        // 先找出所有文本中自动计算出的最大字号(也可以选最小的,根据需求调整)
        foreach (var tmpText in allTmpTexts)
        {
            if (tmpText.fontSize > targetFontSize)
            {
                targetFontSize = tmpText.fontSize;
            }
        }

        // 统一设置字号并关闭自动缩放
        foreach (var tmpText in allTmpTexts)
        {
            tmpText.enableAutoSizing = false;
            tmpText.fontSize = targetFontSize;
        }
    }
}
  • 把这个脚本挂在Vertical Layout Group所在的GameObject上,运行后就能自动把所有文本的字号统一成最大的那个自动计算值。
方案2:优化布局约束减少字号差异

如果不想用脚本,可以先优化布局设置,尽量让Auto-Sizing的计算基准一致:

  • 给Vertical Layout Group勾选Child Force Expand > Width,确保所有子文本的宽度完全相同,这样Auto-Sizing的缩放边界一致,字号更大概率统一
  • 创建一个TMP文本预设,统一设置好最大/最小字号范围、字体、行高参数,所有动态生成的文本都从这个预设实例化,避免参数不一致导致的字号差异
方案3:进阶自定义Auto-Sizing逻辑(不推荐新手)

如果你想保留Auto-Sizing的同时强制统一字号,需要修改TMP的布局计算逻辑,但在你用的旧版本里,这个操作比较繁琐,需要修改TMP源码或者写扩展方法。除非有特殊需求,否则前两个方案足够解决问题。

另外注意:在Unity 5.6.x版本中,如果延迟执行的时间不够导致布局没刷新完成,可以把Invoke换成协程等待一帧,或者在Update里只执行一次字号同步操作。

内容的提问来源于stack exchange,提问作者user9474008

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:30:12