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(file); Text[] transArr14 = _prefab.GetComponentsInChildren(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(); } }; } }