1、勾选文本框的Best Fit,发现效果不是特别理想,文本变多的情况下应该是先换行,摆满之后才会字体缩小,如果文本内有空格的情况下,好像是可以的
2、自定义text
using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; ///二、文本框随文字内容变化大小/// Text /// 自动收缩 /// 勾选Best Fit后,只有超过文本框后才会缩小字号 /// public class ShrinkText : Text { ////// 当前可见的文字行数 /// public int VisibleLines { get; private set; } private void _UseFitSettings() { TextGenerationSettings settings = GetGenerationSettings(rectTransform.rect.size); settings.resizeTextForBestFit = false; if (!resizeTextForBestFit) { cachedTextGenerator.PopulateWithErrors(text, settings, gameObject); return; } int minSize = resizeTextMinSize; int txtLen = text.Length; for (int i = resizeTextMaxSize; i >= minSize; --i) { settings.fontSize = i; cachedTextGenerator.PopulateWithErrors(text, settings, gameObject); if (cachedTextGenerator.characterCountVisible == txtLen) break; } } private readonly UIVertex[] _tmpVerts = new UIVertex[4]; protected override void OnPopulateMesh(VertexHelper toFill) { if (null == font) return; m_DisableFontTextureRebuiltCallback = true; _UseFitSettings(); // Apply the offset to the vertices IListverts = cachedTextGenerator.verts; float unitsPerPixel = 1 / pixelsPerUnit; int vertCount = verts.Count; // We have no verts to process just return (case 1037923) if (vertCount <= 0) { toFill.Clear(); return; } Vector2 roundingOffset = new Vector2(verts[0].position.x, verts[0].position.y) * unitsPerPixel; roundingOffset = PixelAdjustPoint(roundingOffset) - roundingOffset; toFill.Clear(); if (roundingOffset != Vector2.zero) { for (int i = 0; i < vertCount; ++i) { int tempVertsIndex = i & 3; _tmpVerts[tempVertsIndex] = verts[i]; _tmpVerts[tempVertsIndex].position *= unitsPerPixel; _tmpVerts[tempVertsIndex].position.x += roundingOffset.x; _tmpVerts[tempVertsIndex].position.y += roundingOffset.y; if (tempVertsIndex == 3) toFill.AddUIVertexQuad(_tmpVerts); } } else { for (int i = 0; i < vertCount; ++i) { int tempVertsIndex = i & 3; _tmpVerts[tempVertsIndex] = verts[i]; _tmpVerts[tempVertsIndex].position *= unitsPerPixel; if (tempVertsIndex == 3) toFill.AddUIVertexQuad(_tmpVerts); } } m_DisableFontTextureRebuiltCallback = false; VisibleLines = cachedTextGenerator.lineCount; } }
1、添加Content Size Fitter组件,根据需求选择水平可变还是竖直可变,将对应的Fit改为Perferred Size
1、在Text文本框的父对象上添加Content Size Fitter和Vertical Layout Group组件
2、Text不能勾选Best Fit
3、调节父对象的Content Size Fitter和Vertical Layout Group组件以达到自己想要的效果
参考[Unity] UGUI拓展 - 更好用的文字缩放ShrinkText - 简书 (jianshu.com)
(2条消息) Unity -UGUI中Text文本框的自动调整,字体大小的自适应调节_国韵的博客-CSDN博客_ugui 文字自适应



