====== TextコンポーネントのFontを一括変更する(5.4.1f) ====== ===== 概要 ===== 指定したディレクトリ内のPrefabに割り当てられているTextコンポーネントのFontを一括で変更できるEditor拡張です。 using UnityEngine; using UnityEngine.UI; using UnityEditor; using System.Collections; using System.Collections.Generic; ///--------------------------------------------- /// /// フォント一括入れ替え /// ///--------------------------------------------- public class FontReplacer : EditorWindow { string[] sarchDir = { "Assets/Resources/Prefabs"}; private Font fontData; [MenuItem("Tools/Font/FontReplecer")] public static void GetWindow() { EditorWindow.GetWindow(typeof(FontReplacer)).Show(); } ///--------------------------------------------- /// /// 更新 /// ///--------------------------------------------- void OnGUI() { this.fontData = EditorGUILayout.ObjectField("Font", this.fontData, typeof(Font), true) as Font; if (this.fontData == null) { return; } if (GUILayout.Button("Replace font in all assets")) { Replace (this.fontData); } } ///--------------------------------------------- /// /// 更新 /// ///--------------------------------------------- private void Replace(Font _fontData) { string title = "Replacing [" + _fontData.name + "]"; string[] guids = AssetDatabase.FindAssets("", sarchDir); //string[] guids = AssetDatabase.FindAssets ("l:concrete"); bool isSave = false; for (int ii = 0; ii < guids.Length; ii++) { string guid = guids [ii]; string guidPath = AssetDatabase.GUIDToAssetPath(guid); EditorUtility.DisplayProgressBar(title, guidPath, (float)ii / (float)guids.Length); GameObject go = AssetDatabase.LoadAssetAtPath(guidPath); if(go != null) { List textList = GetComponentsInParentAndChildren (go); for (int jj = 0; jj < textList.Count; jj++) { Text textData = textList[jj]; if (textData != null) { textData.font = _fontData; EditorUtility.SetDirty(textData); } } isSave = true; } } if(isSave) { AssetDatabase.SaveAssets(); } EditorUtility.ClearProgressBar(); } private static List GetComponentsInParentAndChildren(GameObject target) where T : UnityEngine.Component { bool includeInactive = true; List _list = new List (target.GetComponents ()); _list.AddRange (new List (target.GetComponentsInChildren (includeInactive))); _list.AddRange (new List (target.GetComponentsInParent (includeInactive))); return _list; } }