Pri práci s posúvateľnými vstupnými poľami Nova UI v Unity 6 sme narazili na problém: TouchScreenKeyboard.isSupported vracalo true aj na Windows a macOS.
Virtuálna klávesnica sa však nezobrazila. Unity považuje za podporu aj prítomnosť hardvérovej klávesnice, hoci softvérovú klávesnicu na desktope neotvorí.
Príznak v TextFieldMobileInput.InputLoop
if (touchScreenKeyboardController.Status != TouchScreenKeyboard.Status.Visible)
Kontrola nesprávne predpokladala viditeľnú klávesnicu a spôsobovala stratu zamerania alebo ukončenie korutiny.
Správna oprava
Nespoliehajte sa iba na TouchScreenKeyboard.isSupported. Skombinujte ho s Application.isMobilePlatform:
void Awake()
{
if (!Application.isMobilePlatform)
{
Debug.Log("TextFieldMobileInput disabled on non-mobile platform.");
this.enabled = false;
}
}
Alebo 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;
}
Tak sa mobilný vstup nebude spúšťať na platformách, ktoré ho nepodporujú.
Výsledok
- Android/iOS: softvérovú klávesnicu obsluhuje
TextFieldMobileInput. - Desktop: preberá ju
TextFieldKeyboardInput. - Žiadne zavádzajúce kontroly ani zbytočné korutiny.
Tip navyše
V Editore môžete pridať kontextové menu alebo validačný skript, aby sa komponent pri testovaní nechtiac nezapol v prefabe.
Záver
Jednoduchá kontrola platformy za behu umožní vstupným poliam Nova UI správne fungovať na rôznych zariadeniach.

