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(); 
 | 
            } 
 | 
        }; 
 | 
    } 
 | 
     
 | 
  
 | 
   
 | 
} 
 |