当前位置: 代码迷 >> 综合 >> UGUI 文本框根据文字内容自适应(自己计算方式)
  详细解决方案

UGUI 文本框根据文字内容自适应(自己计算方式)

热度:92   发布时间:2024-03-07 09:17:40.0

总体思路就是,得到文本框内单个文字宽高,然后根据文本框的宽度算出一行应该有多少文字,然后根据文本框内总的文本数量除以一行文字数量得到行数,最后通过行数加行间距乘以单个文字高度在设置给文本框就可以了!!!代码附上,自己研究。

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);}}}