Unity设置默认字体
程序员文章站
2022-03-09 16:37:13
...
unity并没有设置UI中Text默认字体这个参数,网上也没找到能用的,只好自己写一个了。
首先
创建一个窗口来选择默认字体,然后把字体信息存储在本地,这样一个工程设置一次就行了
using UnityEngine;
using UnityEditor;
窗口类
public class SetDefaultFont : EditorWindow
{
private static Font m_font;
private static EditorWindow window;
public static Font Font
{
get
{
return m_font;
}
}
[MenuItem("CustomTool/设置默认字体")]
public static void OpenWindow()
{
window = GetWindow(typeof (SetDefaultFont));
window.minSize = new Vector2(500, 300);
m_font = ToolCacheManager.GetFont();
}
private void OnGUI()
{
EditorGUILayout.Space();
EditorGUILayout.LabelField("选择默认字体");
EditorGUILayout.Space();
m_font = (Font)EditorGUILayout.ObjectField(m_font, typeof (Font), true);
EditorGUILayout.Space();
if (GUILayout.Button("确定"))
{
ToolCacheManager.SaveFont(m_font);
window.Close();
}
}
}
缓存管理类
public class ToolCacheManager
{
private static readonly string cachePath =
Application.dataPath.Substring(0, Application.dataPath.Length - 6) + "Library/BlueToolkitCache/";
private static void Init()
{
if (!Directory.Exists(cachePath))
{
Directory.CreateDirectory(cachePath);
}
}
public static void SaveFont(Font font)
{
FontData data = ScriptableObject.CreateInstance<FontData>();
data.defaultFont = font;
AssetDatabase.CreateAsset(data, "Assets/ToolKit/Cache/FontData.asset");
}
public static Font GetFont()
{
FontData data = AssetDatabase.LoadAssetAtPath<FontData>("Assets/ToolKit/Cache/FontData.asset");
return data.defaultFont;
}
}
数据类型
[System.Serializable]
public class FontData : ScriptableObject
{
[SerializeField]
public Font defaultFont;
}
然后
我们就需要在创建新的Text时,把我们选择的Font赋值进去,但是我没有找到直接和Text对应的响应事件,所以迂回了一下,在编辑器响应事件里,添加我们的方法。
当Text被创建时,新建的物体是处于选中状态的,所以利用hierarchyWindowChanged这个系统回调,在hierarchy改变时,我们查找选中物体是否还有Text组件,有的话就赋值,没有就忽略。
public class UnityUIEvent
{
[InitializeOnLoadMethod]
private static void Init()
{
Action OnEvent = delegate
{
ChangeDefaultFont();
};
EditorApplication.hierarchyWindowChanged = delegate()
{
OnEvent();
};
}
private static void ChangeDefaultFont()
{
if (Selection.activeGameObject != null)
{
Text text = Selection.activeGameObject.Get<Text>();
if (text != null)
{
text.font = ToolCacheManager.GetFont();
}
}
}
}
以上就是设置默认字体这个小插件的全部代码,可能有一两处需要修改的地方,因为我用了自己写的拓展方法,要用的话,就自己修改一下~
这个小工具收录在我自己写的工具集里面,这个工具集刚开始写,会慢慢完善,如果有大神看到,还望不吝赐教。
工具集地址:https://github.com/BlueMonk1107/BlueToolkit