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

轉載請註明出處,本文鏈接:https://www.uj5u.com/net/250415.html
標籤:C#
