29 lines
1.3 KiB
C#
29 lines
1.3 KiB
C#
|
using System.Reflection;
|
|||
|
using UnityEngine;
|
|||
|
using UnityEngine.UI;
|
|||
|
|
|||
|
namespace IngameDebugConsole
|
|||
|
{
|
|||
|
// Fixes: https://github.com/yasirkula/UnityIngameDebugConsole/issues/77
|
|||
|
// This was caused by Canvas.ForceUpdateCanvases in InputField.UpdateLabel (added in 2022.1 to resolve another bug: https://issuetracker.unity3d.com/issues/input-fields-width-doesnt-change-after-entering-specific-combinations-of-text-when-the-content-size-fitter-is-used)
|
|||
|
// which is triggered from InputField.OnValidate. UpdateLabel isn't invoked if a variable called m_PreventFontCallback is true,
|
|||
|
// which is what this component is doing: temporarily switching that variable before InputField.OnValidate to avoid this issue.
|
|||
|
#if UNITY_2022_1_OR_NEWER && UNITY_EDITOR
|
|||
|
[DefaultExecutionOrder( -50 )]
|
|||
|
#endif
|
|||
|
public class InputFieldWarningsFixer : MonoBehaviour
|
|||
|
{
|
|||
|
#if UNITY_2022_1_OR_NEWER && UNITY_EDITOR
|
|||
|
private static readonly FieldInfo preventFontCallback = typeof( InputField ).GetField( "m_PreventFontCallback", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance );
|
|||
|
|
|||
|
protected void OnValidate()
|
|||
|
{
|
|||
|
if( preventFontCallback != null && TryGetComponent( out InputField inputField ) )
|
|||
|
{
|
|||
|
preventFontCallback.SetValue( inputField, true );
|
|||
|
UnityEditor.EditorApplication.delayCall += () => preventFontCallback.SetValue( inputField, false );
|
|||
|
}
|
|||
|
}
|
|||
|
#endif
|
|||
|
}
|
|||
|
}
|