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
|