当前位置:   article > 正文

Unity设置默认字体_unity 5.6 默认字体修改

unity 5.6 默认字体修改

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();
            }
        }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
缓存管理类
    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;
        }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
数据类型
[System.Serializable]
    public class FontData : ScriptableObject
    {
        [SerializeField]
        public Font defaultFont;
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

然后

我们就需要在创建新的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();
                }
            }
        }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

以上就是设置默认字体这个小插件的全部代码,可能有一两处需要修改的地方,因为我用了自己写的拓展方法,要用的话,就自己修改一下~

这个小工具收录在我自己写的工具集里面,这个工具集刚开始写,会慢慢完善,如果有大神看到,还望不吝赐教。
工具集地址:https://github.com/BlueMonk1107/BlueToolkit

我会在我的公众号上推送新的博文,也可以帮大家解答问题
微信公众号 Andy and Unity 搜索名称或扫描二维码
在这里插入图片描述
希望我们能共同成长,共同进步

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/89942
推荐阅读
相关标签
  

闽ICP备14008679号