以前项目中,负责整个项目的交互设计包括UI制作等等。制作UI时,有时候要批量更换UI元素上的字体。于是就写了一个编辑器工具,使用方法是先在“Hierarchy”面板中选中需要更换字体的UI根节点,然后在“MyTools”下面找到“ChangeFont”,点击即可弹出窗口,然后在窗口中选中字体,点击按钮“Are You Sure ? ”完成更换。更换后,会在Console面板输出哪些对象更换成功。
下面上代码
using UnityEngine;
using UnityEngine.UI;
using UnityEditor;
/// <summary>
/// 修改制定对象上的Text组件中的字体
/// </summary>
public class ChangeFonts : EditorWindow
{
//用来存储选择的字体
static Font font;
[MenuItem("MyTools/ChangeFont")]
//创建窗口
static void ChangeTheFonts()
{
Rect wr = new Rect(0, 0, 250, 100);
ChangeFonts window = (ChangeFonts)GetWindowWithRect(typeof(ChangeFonts), wr, true, "修改字体");
window.Show();
}
void OnGUI()
{
//绘制字体选择框
font = EditorGUILayout.ObjectField("选择字体", font, typeof(Font), true) as Font;
//绘制按钮且编辑点击按钮执行功能
if (GUILayout.Button("Are You Sure ? ", GUILayout.Width(100)))
{
GameObject go = Selection.activeGameObject;
Text[] texts = go.GetComponentsInChildren<Text>();
//遍历找到的Text组件,并更换字体
foreach (Text item in texts)
{
item.font = font;
Debug.Log("将" + item.gameObject.name + "的Text组件的字体更换为:" + font.name + "!");
}
}
}
//刷新窗口
void OnInspectorUpdate()
{
this.Repaint();
}
}