Unity 背景自适应文本内容

效果:

    先设置Text锚点让他根据父物体拉伸,父物体锚点根据自己需求设置。
    然后在父物体上挂载脚本
using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
using UnityEngine.UI;

public class AutoSizeText : MonoBehaviour
{
    //Text最大宽度
    public float maxWidth = 500;
    private Text text;//Text和TMP都可以
    private RectTransform rectTransform;

    void Start()
    {
        rectTransform = GetComponent<RectTransform>();
        text = GetComponentInChildren<Text>();
    }

    void Update()
    {
        TextAreaChange();
    }

    /// <summary>
    /// 文本自适应,Text锚点设置为拉伸
    /// </summary>
    /// <param name="text">文本(Text和TMP都可以)</param>
    /// <param name="parent">文本父物体</param>
    /// <param name="maxWith">最大宽度(超过这个值扩展高度)</param>
    public void TextAreaChange()
    {
        RectTransform rect = text.rectTransform;
        // 获取Text的Size
        Vector2 oldSize = rect.rect.size;
        Vector2 parentSize = rectTransform.rect.size;

        //Text的宽度
        float width = text.preferredWidth < maxWidth ? text.preferredWidth : maxWidth;

        //父物体的宽度
        rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, parentSize.x + width - oldSize.x);

        //必须先设置宽再设置高
        float height = text.preferredHeight;
        rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, parentSize.y + height - oldSize.y);
    }
}
经验分享 程序员 微信小程序 职场和发展