总体思路就是,得到文本框内单个文字宽高,然后根据文本框的宽度算出一行应该有多少文字,然后根据文本框内总的文本数量除以一行文字数量得到行数,最后通过行数加行间距乘以单个文字高度在设置给文本框就可以了!!!代码附上,自己研究。
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class AdaptScripts : MonoBehaviour
{
private RectTransform m_DialogueBase; //文本框父物体RectTransform
private RectTransform m_DialogueText; // 文本框RectTransform
private 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);
#endregion
try
{
// 获取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);
}
}
}
版权声明:本文为L877790502原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。