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); }
}ui
public class ChatInfo : MonoBehaviour
{code
#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); }
}orm
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;blog
public class UITools : Singleton
{
public void UpdateLayout(params RectTransform[] rects) { for (int i = 0; i < rects.Length; i++) { LayoutRebuilder.ForceRebuildLayoutImmediate(rects[i]); } }
}string