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
|
}
|