Při práci s posouvatelnými vstupními poli Nova UI v Unity 6 jsme narazili na problém: TouchScreenKeyboard.isSupported vracelo true i na Windows a macOS.
Virtuální klávesnice se nezobrazila. Unity považuje za podporu i přítomnost hardwarové klávesnice, přestože softwarovou klávesnici na desktopu neotevře.
Příznak v TextFieldMobileInput.InputLoop
if (touchScreenKeyboardController.Status != TouchScreenKeyboard.Status.Visible)
Kontrola nesprávně předpokládala viditelnou klávesnici a způsobovala ztrátu zaměření nebo ukončení korutiny.
Správná oprava
Nespoléhejte jen na TouchScreenKeyboard.isSupported. Zkombinujte ho s Application.isMobilePlatform:
void Awake()
{
if (!Application.isMobilePlatform)
{
Debug.Log("TextFieldMobileInput disabled on non-mobile platform.");
this.enabled = false;
}
}
Nebo upravte TextFieldMobileInput v Nova UI:
protected override void OnEnable()
{
Debug.Log("TouchScreenKeyboard.isSupported: " + TouchScreenKeyboard.isSupported);
if (!Application.isMobilePlatform || !TouchScreenKeyboard.isSupported)
{
Debug.Log("Disabling TextFieldMobileInput – not a mobile platform");
enabled = false;
// If touchscreen keyboard not supported on this device, do nothing
return;
}
base.OnEnable();
// Subscribe to selection changed so we can update the touch screen
// keyboard whenever the input field selection changes
inputField.OnTextSelectionChanged += UpdateTouchScreenKeyboardSelection;
}
Mobilní vstup se tak nebude spouštět na platformách, které ho nepodporují.
Výsledek
- Android/iOS: softwarovou klávesnici obsluhuje
TextFieldMobileInput. - Desktop: přebírá ji
TextFieldKeyboardInput. - Žádné zavádějící kontroly ani zbytečné korutiny.
Tip navíc
V Editoru můžete přidat kontextové menu či validační skript, aby se komponenta při testování nechtěně nezapnula v prefabu.
Závěr
Jednoduchá kontrola platformy za běhu umožní vstupním polím Nova UI správně fungovat na různých zařízeních.

