赞
踩
UGUI系列博文,可通过导航帖查看
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
我会在我的公众号上推送新的博文,也可以帮大家解答问题
微信公众号 Andy and Unity 搜索名称或扫描二维码
希望我们能共同成长,共同进步
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。