using System.Collections;
|
using System.Collections.Generic;
|
using UnityEngine;
|
using UnityEditor;
|
using System.IO;
|
using UnityEngine.UI;
|
using vnxbqy.UI;
|
|
|
public class ChangePrefabsFont : EditorWindow {
|
|
|
[MenuItem("策划工具/更换字体")]
|
public static void Open()
|
{
|
EditorWindow.GetWindow(typeof(ChangePrefabsFont));
|
}
|
|
Font toChange;
|
static Font toChangeFont;
|
|
Font fromFont;
|
static Font fromChangeFont;
|
void OnGUI()
|
{
|
GUILayout.Label("原字体");
|
fromFont = (Font)EditorGUILayout.ObjectField(fromFont, typeof(Font), true, GUILayout.MinWidth(100f));
|
fromChangeFont = fromFont;
|
GUILayout.Label("替换字体");
|
toChange = (Font)EditorGUILayout.ObjectField(toChange, typeof(Font), true, GUILayout.MinWidth(100f));
|
toChangeFont = toChange;
|
if (GUILayout.Button("更换"))
|
{
|
Change();
|
}
|
}
|
|
public static void Change()
|
{
|
|
//这个很重要,博主发现如果没有这个代码,unity是不会察觉到编辑器有改动的,自然设置完后直接切换场景改变是不被保存
|
//的 如果不加这个代码 在做完更改后 自己随便手动修改下场景里物体的状态 在保存就好了
|
//Undo.RecordObject(t, t.gameObject.name);
|
//t.font = toChangeFont;
|
string topFilePath=Application.dataPath + "/ResourcesOut/UI";
|
|
|
string[] filepaths1 = Directory.GetFiles(topFilePath, "*.prefab", SearchOption.AllDirectories);
|
topFilePath = Application.dataPath + "/ResourcesOut/BuiltIn";
|
string[] filepaths2 = Directory.GetFiles(topFilePath, "*.prefab", SearchOption.AllDirectories);
|
|
|
string[] filepaths = new string[filepaths1.Length + filepaths2.Length];
|
|
filepaths1.CopyTo(filepaths, 0);
|
filepaths2.CopyTo(filepaths, filepaths1.Length);
|
Debug.LogFormat("预修改预制体字体总数:{0}", filepaths.Length);
|
int startIndex = 0; //文件执行个数
|
|
int a = 0; // 总字体数
|
int i = 0; // 更换字体数
|
EditorApplication.update = delegate () {
|
string file = filepaths[startIndex];
|
file = file.Substring(file.IndexOf("Assets"));
|
bool isCancel = EditorUtility.DisplayCancelableProgressBar("预制体文字-"+filepaths.Length, file, (float)startIndex / (float)filepaths.Length);
|
GameObject _prefab = AssetDatabase.LoadAssetAtPath<GameObject>(file);
|
|
Text[] transArr14 = _prefab.GetComponentsInChildren<Text>(true);
|
a += transArr14.Length;
|
|
foreach (Text item in transArr14)
|
{
|
|
// /Debug.LogFormat("{0}包含文字 {1}-{2}", file, item.name, item.text);
|
if (item.font == fromChangeFont)
|
{
|
//item.font = toChangeFont;
|
//item.fontSize = item.fontSize - 2;
|
bool change = true;
|
if (item.rectTransform.rect.height <= 2)
|
{
|
change = false;
|
}
|
else if (item.fontSize == 16 && item.rectTransform.rect.height < 23)
|
{
|
item.rectTransform.sizeDelta = new Vector2(item.rectTransform.rect.width, 23);
|
}
|
else if (item.fontSize == 17 && item.rectTransform.rect.height < 25)
|
{
|
item.rectTransform.sizeDelta = new Vector2(item.rectTransform.rect.width, 25);
|
}
|
else if (item.fontSize == 18 && item.rectTransform.rect.height < 26)
|
{
|
item.rectTransform.sizeDelta = new Vector2(item.rectTransform.rect.width, 26);
|
}
|
else if (item.fontSize == 19 && item.rectTransform.rect.height < 27)
|
{
|
item.rectTransform.sizeDelta = new Vector2(item.rectTransform.rect.width, 27);
|
}
|
else if (item.fontSize == 20 && item.rectTransform.rect.height < 29)
|
{
|
item.rectTransform.sizeDelta = new Vector2(item.rectTransform.rect.width, 29);
|
}
|
else if (item.fontSize == 21 && item.rectTransform.rect.height < 30)
|
{
|
item.rectTransform.sizeDelta = new Vector2(item.rectTransform.rect.width, 30);
|
}
|
else if (item.fontSize == 22 && item.rectTransform.rect.height < 31)
|
{
|
item.rectTransform.sizeDelta = new Vector2(item.rectTransform.rect.width, 31);
|
}
|
else if (item.fontSize == 23 && item.rectTransform.rect.height < 33)
|
{
|
item.rectTransform.sizeDelta = new Vector2(item.rectTransform.rect.width, 33);
|
}
|
else if (item.fontSize == 24 && item.rectTransform.rect.height < 35)
|
{
|
item.rectTransform.sizeDelta = new Vector2(item.rectTransform.rect.width, 35);
|
}
|
else if (item.fontSize == 25 && item.rectTransform.rect.height < 37)
|
{
|
item.rectTransform.sizeDelta = new Vector2(item.rectTransform.rect.width, 37);
|
}
|
else if (item.fontSize == 26 && item.rectTransform.rect.height < 39)
|
{
|
item.rectTransform.sizeDelta = new Vector2(item.rectTransform.rect.width, 39);
|
}
|
else if (item.fontSize == 27 && item.rectTransform.rect.height < 40)
|
{
|
item.rectTransform.sizeDelta = new Vector2(item.rectTransform.rect.width, 40);
|
}
|
else if (item.fontSize == 28 && item.rectTransform.rect.height < 41)
|
{
|
item.rectTransform.sizeDelta = new Vector2(item.rectTransform.rect.width, 41);
|
}
|
else if (item.fontSize == 29 && item.rectTransform.rect.height < 42)
|
{
|
item.rectTransform.sizeDelta = new Vector2(item.rectTransform.rect.width, 42);
|
}
|
else if (item.fontSize == 30 && item.rectTransform.rect.height < 43)
|
{
|
item.rectTransform.sizeDelta = new Vector2(item.rectTransform.rect.width, 43);
|
}
|
else
|
{
|
change = false;
|
}
|
if (change)
|
{
|
EditorUtility.SetDirty(_prefab);
|
i++;
|
}
|
}
|
|
}
|
startIndex++;
|
|
if (isCancel || startIndex >= filepaths.Length) {
|
Debug.LogFormat("字体批量修改成功--检索{0}个预制体, 字体总个数{1},修改{2}", startIndex, a, i);
|
EditorUtility.ClearProgressBar();
|
EditorApplication.update = null;
|
startIndex = 0;
|
AssetDatabase.SaveAssets();
|
AssetDatabase.Refresh();
|
}
|
};
|
}
|
|
|
|
}
|