using System.Collections; 
 | 
using System.Collections.Generic; 
 | 
using UnityEngine; 
 | 
using UnityEngine.UI; 
 | 
  
 | 
public class TextUpdate : MonoBehaviour 
 | 
{ 
 | 
  
 | 
    List<Text> allTexts = new List<Text>(); 
 | 
  
 | 
    string content = string.Empty; 
 | 
    Font fontData = null; 
 | 
    FontStyle fontStyle; 
 | 
    int fontSize = 14; 
 | 
    float lineSpacing = 0f; 
 | 
    bool richText = true; 
 | 
    TextAnchor alignment; 
 | 
    HorizontalWrapMode hwmode; 
 | 
    VerticalWrapMode vwmode; 
 | 
    Color m_Color; 
 | 
    Material m_Material; 
 | 
    bool raycastTarget; 
 | 
  
 | 
    [ContextMenu("UpdateText")] 
 | 
    public void UpdateText() 
 | 
    { 
 | 
        FindAllText(); 
 | 
  
 | 
        for (int i = allTexts.Count - 1; i >= 0; i--) 
 | 
        { 
 | 
            var text = allTexts[i]; 
 | 
            if (text != null) 
 | 
            { 
 | 
                content = text.text; 
 | 
                fontData = text.font; 
 | 
                fontStyle = text.fontStyle; 
 | 
                fontSize = text.fontSize; 
 | 
                lineSpacing = text.lineSpacing; 
 | 
                richText = text.supportRichText; 
 | 
                alignment = text.alignment; 
 | 
                hwmode = text.horizontalOverflow; 
 | 
                vwmode = text.verticalOverflow; 
 | 
                m_Color = text.color; 
 | 
                m_Material = text.material; 
 | 
                raycastTarget = text.raycastTarget; 
 | 
  
 | 
                var gameObject = text.gameObject; 
 | 
                Component.DestroyImmediate(text); 
 | 
                TextEx textex = gameObject.AddMissingComponent<TextEx>(); 
 | 
  
 | 
                textex.text = content; 
 | 
                textex.font = fontData; 
 | 
                textex.fontStyle = fontStyle; 
 | 
                textex.fontSize = fontSize; 
 | 
                textex.lineSpacing = lineSpacing; 
 | 
                textex.supportRichText = richText; 
 | 
                textex.alignment = alignment; 
 | 
                textex.horizontalOverflow = hwmode; 
 | 
                textex.verticalOverflow = vwmode; 
 | 
                textex.color = m_Color; 
 | 
                textex.material = m_Material; 
 | 
                textex.raycastTarget = raycastTarget; 
 | 
            } 
 | 
        } 
 | 
  
 | 
    } 
 | 
  
 | 
    void FindAllText() 
 | 
    { 
 | 
        allTexts.Clear(); 
 | 
        FindChildText(this.transform, ref allTexts); 
 | 
    } 
 | 
  
 | 
    void FindChildText(Transform _transform, ref List<Text> _allTexts) 
 | 
    { 
 | 
        if (_transform != null) 
 | 
        { 
 | 
            var text = _transform.GetComponent<Text>(); 
 | 
            if (text != null) 
 | 
            { 
 | 
                _allTexts.Add(text); 
 | 
            } 
 | 
  
 | 
            for (int i = 0; i < _transform.childCount; i++) 
 | 
            { 
 | 
                FindChildText(_transform.GetChild(i), ref _allTexts); 
 | 
            } 
 | 
  
 | 
        } 
 | 
    } 
 | 
  
 | 
    #region 字色替换 
 | 
    [SerializeField] Color m_BeforeColor = Color.white; 
 | 
    [SerializeField] Color m_AfterColor = Color.white; 
 | 
    [ContextMenu("替换字色")] 
 | 
    public void UpdateTextColor() 
 | 
    { 
 | 
        FindAllText(); 
 | 
        for (int i = allTexts.Count - 1; i >= 0; i--) 
 | 
        { 
 | 
            if (allTexts[i].color.Equals(m_BeforeColor)) 
 | 
            { 
 | 
                allTexts[i].color = m_AfterColor; 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
    #endregion 
 | 
} 
 |