Pri radu s Nova UI poljima za unos koja se mogu pomicati u Unityju 6 naišli smo na problem: TouchScreenKeyboard.isSupported vraćao je true na desktopu, na platformama poput Windowsa i macOS-a.
Virtualna tipkovnica ipak se nije pojavila. Unity „podršku“ definira široko: ako je dostupna fizička tipkovnica, vraća true, iako se softverska tipkovnica ne prikazuje.
Problem u NovaUI metodi TextFieldMobileInput.InputLoop
if (touchScreenKeyboardController.Status != TouchScreenKeyboard.Status.Visible)
Ova provjera stalno je pogrešno pretpostavljala da je tipkovnica vidljiva, što je dovodilo do neželjenog gubitka fokusa ili prekida korutina.
Ispravno rješenje
Ne oslanjajte se samo na TouchScreenKeyboard.isSupported. Kombinirajte ga s Application.isMobilePlatform za jasnu provjeru tijekom izvođenja:
void Awake()
{
if (!Application.isMobilePlatform)
{
Debug.Log("TextFieldMobileInput disabled on non-mobile platform.");
this.enabled = false;
}
}
Ili izmijenite komponentu TextFieldMobileInput u NovaUI-ju:
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;
}
Tako se kod za mobilni unos ne izvršava na platformama koje ga ne podržavaju.
Rezultat
- Na Androidu/iOS-u:
TextFieldMobileInputobrađuje softversku tipkovnicu. - Na desktopu:
TextFieldKeyboardInputuredno preuzima unos. - Nema pogrešnih provjera tipkovnice ni nepotrebnih korutina.
Dodatni savjet
Provjeru možete provoditi i u Editoru putem kontekstnog izbornika ili skripte za validaciju, kako prefab tijekom testiranja ne bi slučajno ponovno uključio komponentu.
Završna razmišljanja
Unityjeve razlike među platformama ponovno su se pokazale, ali zaštitna provjera u jednom redu omogućuje ispravno ponašanje Nova UI unosa na svim platformama.

Unity Nova UI: zaštita logike TouchScreenKeyboard tijekom izvođenja na nemobilnim platformama.
