|
@@ -0,0 +1,85 @@
|
|
|
|
|
+using UnityEngine;
|
|
|
|
|
+using UnityEngine.UI;
|
|
|
|
|
+using UnityEditor;
|
|
|
|
|
+using UnityEditor.SceneManagement;
|
|
|
|
|
+using System.Collections.Generic;
|
|
|
|
|
+using System.IO;
|
|
|
|
|
+
|
|
|
|
|
+public class GlobalSceneFontReplacer
|
|
|
|
|
+{
|
|
|
|
|
+ [MenuItem("Tools/全项目场景 + Prefab 替换字体")]
|
|
|
|
|
+ static void ReplaceFontInAllScenesAndPrefabs()
|
|
|
|
|
+ {
|
|
|
|
|
+ string fontPath = "Assets/BowArrow/Fonts/HarmonyOS_Sans_SC_Regular.ttf";
|
|
|
|
|
+ Font newFont = AssetDatabase.LoadAssetAtPath<Font>(fontPath);
|
|
|
|
|
+ if (newFont == null)
|
|
|
|
|
+ {
|
|
|
|
|
+ Debug.LogError("找不到目标字体!");
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ int totalChanges = 0;
|
|
|
|
|
+
|
|
|
|
|
+ // ✅ 替换所有 prefab
|
|
|
|
|
+ string[] prefabGuids = AssetDatabase.FindAssets("t:Prefab");
|
|
|
|
|
+ foreach (string guid in prefabGuids)
|
|
|
|
|
+ {
|
|
|
|
|
+ string assetPath = AssetDatabase.GUIDToAssetPath(guid);
|
|
|
|
|
+ GameObject obj = AssetDatabase.LoadAssetAtPath<GameObject>(assetPath);
|
|
|
|
|
+ if (obj == null) continue;
|
|
|
|
|
+
|
|
|
|
|
+ Text[] texts = obj.GetComponentsInChildren<Text>(true);
|
|
|
|
|
+ bool changed = false;
|
|
|
|
|
+ foreach (Text text in texts)
|
|
|
|
|
+ {
|
|
|
|
|
+ if (text.font != null && text.font.name == "Arial")
|
|
|
|
|
+ {
|
|
|
|
|
+ Undo.RecordObject(text, "Replace Font");
|
|
|
|
|
+ text.font = newFont;
|
|
|
|
|
+ EditorUtility.SetDirty(text);
|
|
|
|
|
+ changed = true;
|
|
|
|
|
+ totalChanges++;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (changed)
|
|
|
|
|
+ {
|
|
|
|
|
+ PrefabUtility.SavePrefabAsset(obj);
|
|
|
|
|
+ AssetDatabase.SaveAssets();
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // ✅ 替换所有场景
|
|
|
|
|
+ string[] sceneGuids = AssetDatabase.FindAssets("t:Scene");
|
|
|
|
|
+ foreach (string guid in sceneGuids)
|
|
|
|
|
+ {
|
|
|
|
|
+ string scenePath = AssetDatabase.GUIDToAssetPath(guid);
|
|
|
|
|
+ var scene = EditorSceneManager.OpenScene(scenePath, OpenSceneMode.Single);
|
|
|
|
|
+ bool changed = false;
|
|
|
|
|
+
|
|
|
|
|
+ foreach (GameObject root in scene.GetRootGameObjects())
|
|
|
|
|
+ {
|
|
|
|
|
+ Text[] texts = root.GetComponentsInChildren<Text>(true);
|
|
|
|
|
+ foreach (Text text in texts)
|
|
|
|
|
+ {
|
|
|
|
|
+ if (text.font != null && text.font.name == "Arial")
|
|
|
|
|
+ {
|
|
|
|
|
+ Undo.RecordObject(text, "Replace Font");
|
|
|
|
|
+ text.font = newFont;
|
|
|
|
|
+ EditorUtility.SetDirty(text);
|
|
|
|
|
+ changed = true;
|
|
|
|
|
+ totalChanges++;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (changed)
|
|
|
|
|
+ {
|
|
|
|
|
+ EditorSceneManager.MarkSceneDirty(scene);
|
|
|
|
|
+ EditorSceneManager.SaveScene(scene);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ Debug.Log($"✅ 场景 + Prefab 字体替换完成,共替换 {totalChanges} 个 Text 字体。");
|
|
|
|
|
+ }
|
|
|
|
|
+}
|