using TMPro; using UnityEngine; using UnityEngine.UI; [RequireComponent(typeof(TMP_Text))] public class ControlTextSize : MonoBehaviour, ILayoutElement { private TMP_Text curTxt; private bool cached = false; public float maxPreferredWidth = 0f; public float maxPreferredHeight = 0f; public float flexibleHeight { get { cacheReferences(); return curTxt.flexibleHeight; } } public float flexibleWidth { get { cacheReferences(); return curTxt.flexibleWidth; } } public int layoutPriority { get { return 1; } } public float minHeight { get { cacheReferences(); return curTxt.minHeight; } } public float minWidth { get { cacheReferences(); return curTxt.minWidth; } } public float preferredHeight { get { cacheReferences(); if (Mathf.Approximately(maxPreferredHeight, 0f)) { return curTxt.preferredHeight; } else { return curTxt.preferredHeight > maxPreferredHeight ? maxPreferredHeight : curTxt.preferredHeight; } } } public float preferredWidth { get { cacheReferences(); if (Mathf.Approximately(maxPreferredWidth, 0f)) { return curTxt.preferredWidth; } else { return curTxt.preferredWidth > maxPreferredWidth ? maxPreferredWidth : curTxt.preferredWidth; } } } public void CalculateLayoutInputHorizontal() { cacheReferences(); } public void CalculateLayoutInputVertical() { cacheReferences(); } private void cacheReferences() { if (!cached) { curTxt = gameObject.GetComponent(); cached = true; } } }