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); }; } } }