using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor; using System.IO; using UnityEngine.UI; using vnxbqy.UI; //根据项目当下情况调整,谨慎使用 public class ChangePrefabsFontSize : EditorWindow { [MenuItem("策划工具/更改字体大小(慎用)")] public static void Open() { EditorWindow.GetWindow(typeof(ChangePrefabsFontSize)); } Font fromFont; static Font fromChangeFont; void OnGUI() { GUILayout.Label("字体"); fromFont = (Font)EditorGUILayout.ObjectField(fromFont, typeof(Font), true, GUILayout.MinWidth(100f)); fromChangeFont = fromFont; if (GUILayout.Button("更换字体大小")) { Change(); } } public static void Change() { 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) { bool change = false; if (item.text == "0") { item.text = ""; change = true; } if (change) { EditorUtility.SetDirty(_prefab); Debug.LogFormat("界面 {0} 字体大小修改成功", file); 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(); } }; } }