You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

120 lines
3.5 KiB

#if UNITY_EDITOR
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using UnityEngine.UI;
/// <summary>
/// ui工具
/// </summary>
public class ExchangeFont : EditorWindow
{
[MenuItem("UnityExt/UI/更换字体")]
public static void Open()
{
EditorWindow.GetWindow(typeof(ExchangeFont), true);
}
public Font SelectOldFont;
static Font OldFont;
public Font SelectNewFont;
static Font NewFont;
static float NewLineSpacing;
private void OnGUI()
{
SelectOldFont = (Font)EditorGUILayout.ObjectField("请选择想更换的字体", SelectOldFont, typeof(Font), true, GUILayout.MinWidth(100));
OldFont = SelectOldFont;
SelectNewFont = (Font)EditorGUILayout.ObjectField("请选择新的字体", SelectNewFont, typeof(Font), true, GUILayout.MinWidth(100));
NewFont = SelectNewFont;
NewLineSpacing = 1;
NewLineSpacing = EditorGUILayout.FloatField("新行间距", NewLineSpacing);
if (GUILayout.Button("更换选中的预制体"))
{
if (SelectOldFont == null || SelectNewFont == null)
{
Debug.LogError("请选择字体!");
}
else
{
Change();
}
}
if (GUILayout.Button("更换文件夹下所有的预制体"))
{
if (SelectOldFont == null || SelectNewFont == null)
{
Debug.LogError("请选择字体!");
}
else
{
ChangeSelectFloud();
}
}
}
public static void Change()
{
Object[] Texts = Selection.GetFiltered(typeof(Text), SelectionMode.Deep);
Debug.Log("找到" + Texts.Length + "个Text即将处理");
int count = 0;
foreach (Object text in Texts)
{
if (text)
{
Text AimText = (Text)text;
Undo.RecordObject(AimText, AimText.gameObject.name);
if (AimText.font == OldFont)
{
AimText.font = NewFont;
AimText.lineSpacing = NewLineSpacing;
//Debug.Log(AimText.name + ":" + AimText.text);
EditorUtility.SetDirty(AimText);
count++;
}
}
}
Debug.Log("字体更换完毕!更换了" + count + "个");
}
public static void ChangeSelectFloud()
{
object[] objs = Selection.GetFiltered(typeof(object), SelectionMode.DeepAssets);
for (int i = 0; i < objs.Length; i++)
{
string ext = System.IO.Path.GetExtension(objs[i].ToString());
if (!ext.Contains(".GameObject"))
{
continue;
}
GameObject go = (GameObject)objs[i];
var Texts = go.GetComponentsInChildren<Text>(true);
int count = 0;
foreach (Text text in Texts)
{
Undo.RecordObject(text, text.gameObject.name);
if (text.font == OldFont)
{
text.font = NewFont;
text.lineSpacing = NewLineSpacing;
EditorUtility.SetDirty(text);
count++;
}
}
if (count > 0)
{
AssetDatabase.SaveAssets();
Debug.Log(go.name + "界面有:" + count + "个Arial字体");
}
}
}
}
#endif