欢迎光临
我的个人博客网站

计算字体宽度及Text组件的自适应

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class ChatView : MonoBehaviour
{

#region RectTransform private RectTransform ChatContent; #endregion  #region GameObject private GameObject LeftChatObj; private GameObject RightChatObj; #endregion  private void Awake() {     InitGetComponent(); }  private void Start() {     Test(); }  private void InitGetComponent() {     #region RectTransform     ChatContent = transform.Find("ChatPanel/ScrollView/Viewport/ChatContent").GetComponent<RectTransform>();     #endregion      #region GameObject     LeftChatObj = Resources.Load<GameObject>("Info/LeftChatInfo");     RightChatObj = Resources.Load<GameObject>("Info/RightChatInfo");     #endregion }  //测试方法 private void Test() {     ChatInfo info1 = Instantiate(LeftChatObj, ChatContent).GetComponent<ChatInfo>();     ChatInfo info2 = Instantiate(RightChatObj, ChatContent).GetComponent<ChatInfo>();     //     info1.SetChatText("椅子在异乡,树叶有翅膀,椅子在异乡,树叶有翅膀,椅子在异乡,树叶有翅膀");     info2.SetChatText("斯人如彩虹,遇上方知有,斯人如彩虹,遇上方知有,斯人如彩虹,遇上方知有,斯人如彩虹,遇上方知有,斯人如彩虹,遇上方知有");     UpdateLayout(); }  private void UpdateLayout() {     UITools.Instance.UpdateLayout(ChatContent); } 

}

public class ChatInfo : MonoBehaviour
{

#region RectTransform private RectTransform RtChatContentText; private RectTransform RtBgEmpty; private RectTransform RtContentEmpty; private RectTransform RtSelf; #endregion  #region Text private Text ChatContentText; #endregion  #region float //字体总宽高 private float m_FontTotalWidth = 0f; private float m_FontTotalHeight = 0f; //Text文本的宽高 private float m_TextWidth = 0f; private float m_TextHeight = 0f; //Text背景图宽高 private float m_TextBgWidth = 0f; private float m_TextBgHeight = 0f; #endregion   private void Awake() {     InitGetComponent(); }  private void Start() {     //SetChatText("椅子在异乡,树叶有翅膀。椅子在异乡,树叶有翅膀。椅子在异乡,树叶有翅膀。椅子在异乡,树叶有翅膀。椅子在异乡,树叶有翅膀。");     //SetChatText("椅子在异乡,树叶有翅膀。"); }   private void InitGetComponent() {     #region RectTransform     RtChatContentText = transform.Find("ContentEmpty/BgEmpty/ChatContentText").GetComponent<RectTransform>();     RtBgEmpty = transform.Find("ContentEmpty/BgEmpty").GetComponent<RectTransform>();     RtContentEmpty = transform.Find("ContentEmpty").GetComponent<RectTransform>();     RtSelf = transform.GetComponent<RectTransform>();     #endregion      #region Text     ChatContentText = transform.Find("ContentEmpty/BgEmpty/ChatContentText").GetComponent<Text>();     #endregion }   /// <summary> /// 设置聊天内容 /// </summary> public void SetChatText(string str) {     ChatContentText.text = str;     CalculateSize();     UpdateLayout(); }  //计算并设置文本大小 private void CalculateSize() {     string str = ChatContentText.text;     TextGenerator generator = ChatContentText.cachedTextGenerator;     TextGenerationSettings textSetting = ChatContentText.GetGenerationSettings(Vector2.zero);     //字体的总宽高     m_FontTotalWidth = generator.GetPreferredWidth(str, textSetting);     m_FontTotalHeight = generator.GetPreferredHeight(str, textSetting);      IList<UICharInfo> tempList = generator.characters;     //计算新行,此方式可有效计算该行最后一个文字的宽度是否需要计算入下一行的宽度统计内     float tempWidth = 0;     int newLine = 0;     for (int i = 0; i < tempList.Count; i++)     {         tempWidth += tempList[i].charWidth;         if (tempWidth > 240f)         {             tempWidth = tempList[i].charWidth;             newLine += 1;         }     }     //获取Text文本宽高     m_TextWidth = RtChatContentText.rect.width;     m_TextHeight = RtChatContentText.rect.height;     //获取Text的Bg背景图(Text父级)宽高     m_TextBgWidth = RtBgEmpty.rect.width;     m_TextBgHeight = RtBgEmpty.rect.height;     //更新文本高度     m_TextHeight += newLine * 22f;     RtChatContentText.sizeDelta = new Vector2(m_TextWidth, m_TextHeight);     //更新文本Bg高度     m_TextBgHeight += newLine * 22f;     RtBgEmpty.sizeDelta = new Vector2(m_TextBgWidth, m_TextBgHeight); }  //刷新布局 private void UpdateLayout() {     UITools.Instance.UpdateLayout(RtContentEmpty, RtSelf); } 

}

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class UITools : Singleton
{

public void UpdateLayout(params RectTransform[] rects) {     for (int i = 0; i < rects.Length; i++)     {         LayoutRebuilder.ForceRebuildLayoutImmediate(rects[i]);     } } 

}

计算字体宽度及Text组件的自适应

赞(0) 打赏
未经允许不得转载:张拓的天空 » 计算字体宽度及Text组件的自适应
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

专业的IT技术经验分享 更专业 更方便

联系我们本站主机

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏