总体思路就是,得到文本框内单个文字宽高,然后根据文本框的宽度算出一行应该有多少文字,然后根据文本框内总的文本数量除以一行文字数量得到行数,最后通过行数加行间距乘以单个文字高度在设置给文本框就可以了!!!代码附上,自己研究。
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;public class AdaptScripts : MonoBehaviour
{private RectTransform m_DialogueBase; //文本框父物体RectTransformprivate RectTransform m_DialogueText; // 文本框RectTransformprivate Text m_Text; //文本框private TextGenerator m_TextGenerator; //用于生成渲染的文本private TextGenerationSettings m_TextGenerationSettings; //用于存储TextGenerator的设置private void Start(){#region 获取组件m_DialogueBase = transform.GetComponent<RectTransform>();m_DialogueText = transform.Find("Text").GetComponent<RectTransform>();m_Text = m_DialogueText.GetComponent<Text>();m_TextGenerator = m_Text.cachedTextGeneratorForLayout;m_TextGenerationSettings = m_Text.GetGenerationSettings(Vector2.zero);#endregiontry{// 获取Text中第一个文字 有可能为空 就是什么都没有string str = m_Text.text;string s = str[0].ToString();//获取单个文字高度float fountHeight = m_TextGenerator.GetPreferredHeight(s.ToString(), m_TextGenerationSettings);//获取单个文字宽度float fountWidth = m_TextGenerator.GetPreferredWidth(s.ToString(), m_TextGenerationSettings);//每行可以放多少个字float lineNumber = (m_DialogueText.rect.width / fountWidth) - 1;//总文字数量 / 每行最多放的文字 算出文字行数 加1是为了让他尽量大于文本内容 不加也是没事 自己看效果float rowNumber = (m_Text.text.Length / lineNumber) + 1;//宽度没啥说的float width = m_DialogueText.rect.width;//高度就是 行 * (每个文字高度+行间距)float height = rowNumber * (fountHeight + 1.5f);//最终结果m_DialogueBase.sizeDelta = new Vector2(width, height);m_DialogueText.sizeDelta = new Vector2(width, height);}catch(Exception e){Debug.Log(e);}}}