| using System.Collections; | 
| using System.Collections.Generic; | 
| using UnityEngine; | 
| using UnityEditor; | 
| using System.IO; | 
| using UnityEngine.UI; | 
| using Snxxz.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(); | 
|             } | 
|         }; | 
|     } | 
|      | 
|   | 
|    | 
| } |