【Unityエディタ拡張】シーンに存在する全てのTMProのFontAssetを置き換える
2020-05-31
TextMeshProのフォントアセットを一気に置き換える方法がぱっとみ見つからなかったので,とりあえず簡単だがエディタ拡張を作った.
Env.
Windows10 64bit
Unityp2019.3.3f1
SourceCode
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
using UnityEditor; using UnityEngine; using TMPro; namespace nmxi.editor { public class TMProFontAssetUpdater : EditorWindow { static TMProFontAssetUpdater tMProFontAssetUpdater; [SerializeField] static TMP_FontAsset fontAsset; private readonly Vector2 buttonSize = new Vector2(200, 40); [MenuItem("Window/TMProFontAssetUpdater")] static void Open() { if (tMProFontAssetUpdater == null) { tMProFontAssetUpdater = CreateInstance<TMProFontAssetUpdater>(); } tMProFontAssetUpdater.Show(); } private void OnGUI() { EditorGUILayout.Space(); fontAsset = EditorGUILayout.ObjectField("Font Asset", fontAsset, typeof(TMP_FontAsset), true) as TMP_FontAsset; EditorGUILayout.Space(); EditorGUILayout.BeginHorizontal(); { EditorGUILayout.Space(); if (GUILayout.Button("Change All Font Assets", GUILayout.Width(buttonSize.x), GUILayout.Height(buttonSize.y))) { UpdateAll(fontAsset); } EditorGUILayout.Space(); } EditorGUILayout.EndHorizontal(); } private void UpdateAll(TMP_FontAsset f) { foreach (GameObject obj in FindObjectsOfType(typeof(GameObject))) { if (obj.activeInHierarchy) { MonoBehaviour[] monoBehaviours = obj.GetComponents<MonoBehaviour>(); foreach (var monoBehaviour in monoBehaviours) { if (monoBehaviour.GetType().Name == "TextMeshProUGUI") monoBehaviour.GetComponent<TextMeshProUGUI>().font = f; } } } } } } |
上記のTMProFontAssetUpdater.csをEditorフォルダに入れて,
Window/TMProFontAssetUpdater を選択.
TMProFontAssetUpdaterのタブが開かれるのでフォントアセットを選択し,Change All Font Assetをクリックすることで,シーンにあるTMProのフォントアセットが一括で選択したフォントアセットに変更される.