コード例 #1
0
        public void ChangeFont(object ui)
        {
            if (ui == null)
            {
                return;
            }

            var type = ui.GetUnityType();

            if (UnityTypes.Text != null && UnityTypes.Text.IsAssignableFrom(type))
            {
                if (string.IsNullOrEmpty(Settings.OverrideFont))
                {
                    return;
                }

                var Text_fontProperty     = UnityTypes.Text_Properties.Font;
                var Text_fontSizeProperty = UnityTypes.Text_Properties.FontSize;

                var previousFont          = (Font)Text_fontProperty.Get(ui);
                var Font_fontSizeProperty = UnityTypes.Font_Properties.FontSize;

                var newFont = FontCache.GetOrCreate((int?)Font_fontSizeProperty?.Get(previousFont) ?? (int)Text_fontSizeProperty.Get(ui));
                if (newFont == null || previousFont == null)
                {
                    return;
                }

                if (!UnityObjectReferenceComparer.Default.Equals(newFont, previousFont))
                {
                    Text_fontProperty.Set(ui, newFont);
                    _unfont = obj =>
                    {
                        Text_fontProperty.Set(obj, previousFont);
                    };
                }
            }
            else if ((UnityTypes.TextMeshPro != null && UnityTypes.TextMeshPro.IsAssignableFrom(type)) ||
                     (UnityTypes.TextMeshProUGUI != null && UnityTypes.TextMeshProUGUI.IsAssignableFrom(type)))
            {
                if (string.IsNullOrEmpty(Settings.OverrideFontTextMeshPro))
                {
                    return;
                }

                var clrType      = ui.GetType();
                var fontProperty = clrType.CachedProperty("font");

                var previousFont = fontProperty.Get(ui);
                var newFont      = FontCache.GetOrCreateOverrideFontTextMeshPro();
                if (newFont == null || previousFont == null)
                {
                    return;
                }

                if (!UnityObjectReferenceComparer.Default.Equals(newFont, previousFont))
                {
                    fontProperty.Set(ui, newFont);
                    _unfont = obj =>
                    {
                        fontProperty.Set(obj, previousFont);
                    };
                }
            }
        }