New file |
| | |
| | | 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; |
| | | EditorUtility.SetDirty(_prefab); |
| | | i++; |
| | | } |
| | | |
| | | } |
| | | startIndex++; |
| | | |
| | | if (isCancel || startIndex >= filepaths.Length) { |
| | | EditorUtility.ClearProgressBar(); |
| | | EditorApplication.update = null; |
| | | startIndex = 0; |
| | | AssetDatabase.SaveAssets(); |
| | | AssetDatabase.Refresh(); |
| | | Debug.LogFormat("字体批量修改成功--{0}", i); |
| | | } |
| | | }; |
| | | } |
| | | |
| | | |
| | | |
| | | } |