using UnityEngine; 
 | 
using System.Collections; 
 | 
using UnityEngine.UI; 
 | 
#if  UNITY_EDITOR 
 | 
using UnityEditor; 
 | 
  
 | 
#endif 
 | 
  
 | 
[System.Serializable] 
 | 
[RequireComponent(typeof(Image))] 
 | 
public class ImageFitterText : MonoBehaviour 
 | 
{ 
 | 
    [SerializeField] Text m_Target; 
 | 
    [SerializeField] Vector3 delta = Vector3.zero; 
 | 
    [SerializeField] Vector2 sizeDelta = Vector2.zero; 
 | 
    [SerializeField] bool LockWidth = false; 
 | 
    [SerializeField] bool LockHeight = false; 
 | 
    [SerializeField] bool fiterRealTxtWidth = false; 
 | 
    [SerializeField] bool minSizeDeltaHeight = false; 
 | 
    [SerializeField] float minHeightValue = 0f; 
 | 
    RectTransform m_RectTransform; 
 | 
    RectTransform m_Rt { 
 | 
        get { 
 | 
            if (m_RectTransform == null) { 
 | 
                m_RectTransform = this.transform as RectTransform; 
 | 
            } 
 | 
            return m_RectTransform; 
 | 
        } 
 | 
    } 
 | 
  
 | 
    public bool FiterRealTxtWidth 
 | 
    { 
 | 
        set 
 | 
        { 
 | 
            fiterRealTxtWidth = value; 
 | 
        } 
 | 
    } 
 | 
    Vector3 targetLocalPositon = Vector3.zero; 
 | 
    Vector2 targetSizeDelta = Vector2.zero; 
 | 
    private void OnEnable() 
 | 
    { 
 | 
        if (m_Target == null) { 
 | 
            enabled = false; 
 | 
        } 
 | 
        //m_Rt = this.transform as RectTransform; 
 | 
    } 
 | 
    private void LateUpdate() 
 | 
    { 
 | 
        Refresh(); 
 | 
    } 
 | 
    public void Refresh() 
 | 
    { 
 | 
        if (m_Target == null) { 
 | 
            return; 
 | 
        } 
 | 
        Vector2 _sizeDelta = m_Target.rectTransform.sizeDelta + sizeDelta; 
 | 
        if (LockWidth) { 
 | 
            _sizeDelta.x = m_Rt.sizeDelta.x; 
 | 
        } 
 | 
        if (LockHeight) { 
 | 
            _sizeDelta.y = m_Rt.sizeDelta.y; 
 | 
        } 
 | 
        if (fiterRealTxtWidth) { 
 | 
            var _width = Mathf.Min(m_Target.rectTransform.rect.width, m_Target.preferredWidth); 
 | 
            _sizeDelta = m_Target.rectTransform.sizeDelta.SetX(_width) + sizeDelta; 
 | 
        } 
 | 
        targetSizeDelta = _sizeDelta; 
 | 
        targetLocalPositon = m_Target.transform.localPosition + delta; 
 | 
        if (minSizeDeltaHeight && targetSizeDelta.y < minHeightValue) 
 | 
        { 
 | 
            targetSizeDelta.y = minHeightValue; 
 | 
        } 
 | 
        if (targetSizeDelta != m_Rt.sizeDelta || targetLocalPositon != m_Rt.localPosition) { 
 | 
            m_Rt.sizeDelta = targetSizeDelta; 
 | 
            m_Rt.localPosition = targetLocalPositon; 
 | 
        } 
 | 
    } 
 | 
} 
 | 
#if UNITY_EDITOR 
 | 
[CustomEditor(typeof(ImageFitterText))] 
 | 
[CanEditMultipleObjects] 
 | 
public class ImageFitterTextEditor : Editor 
 | 
{ 
 | 
    public ImageFitterText obj; 
 | 
    public override void OnInspectorGUI() 
 | 
    { 
 | 
        obj = target as ImageFitterText; 
 | 
        base.OnInspectorGUI(); 
 | 
        EditorGUILayout.BeginHorizontal(); 
 | 
        if (GUILayout.Button("Execute")) { 
 | 
            obj.Refresh(); 
 | 
        } 
 | 
        EditorGUILayout.EndHorizontal(); 
 | 
    } 
 | 
} 
 | 
#endif 
 |