以前のリビジョンの文書です
「Assets/Resources/Prefabs」以下のUILabelに設定されたFontを一括で設定できるツールです。Editor拡張で作成。
using UnityEngine;
using UnityEditor;
using System.Collections;
using System.Collections.Generic;
public class FontReplace : EditorWindow
{
private UIFont font;
[MenuItem("Tools/Replace Font")]
public static void ReplaceFont() {
EditorWindow.GetWindow(typeof(FontReplace)).Show();
}
void OnGUI()
{
font = EditorGUILayout.ObjectField("UIFont", font, typeof(UIFont), true) as UIFont;
if (font != null) {
if (GUILayout.Button("Replace font in all assets")) {
string title = "Replacing [" + font.name + "]";
EachAsset (title,font);
}
}
}
private static void EachAsset(string _title, UIFont _font)
{
string[] sarchDir = { "Assets/Resources/Prefabs"};
string[] guids = AssetDatabase.FindAssets("", sarchDir);
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<GameObject>(guidPath);
if(go != null)
{
List<UILabel> uiLabelList = go.GetComponentsInParentAndChildren <UILabel> ();
for (int jj = 0; jj < uiLabelList.Count; jj++)
{
UILabel uiLabel = uiLabelList[jj];
if (uiLabel != null)
{
uiLabel.bitmapFont = _font;
EditorUtility.SetDirty(uiLabel);
}
}
AssetDatabase.SaveAssets();
}
}
EditorUtility.ClearProgressBar();
}
}
public static class GameObjectExtension
{
public static T GetComponentInParentAndChildren<T>(this GameObject gameObject) where T : UnityEngine.Component
{
if(gameObject.GetComponentInParent<T>() != null)
{
return gameObject.GetComponentInParent<T>();
}
if(gameObject.GetComponentInChildren<T>() != null)
{
return gameObject.GetComponentInChildren<T>();
}
return gameObject.GetComponent<T>();
}
public static List<T> GetComponentsInParentAndChildren<T>(this GameObject gameObject) where T : UnityEngine.Component
{
List<T> _list = new List<T> (gameObject.GetComponents<T> ());
_list.AddRange (new List<T> (gameObject.GetComponentsInChildren<T> ()));
_list.AddRange (new List<T> (gameObject.GetComponentsInParent<T> ()));
return _list;
}
}