Preskoči na sadržaj
Izbornik
← Natrag na blog

Unity TouchScreenKeyboard na desktop WebGL-u

Frustrated Unity developer debugging TouchScreenKeyboard issue on desktop

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: TextFieldMobileInput obrađuje softversku tipkovnicu.
  • Na desktopu: TextFieldKeyboardInput uredno 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.

Nova UI polje za unos s provjerom mobilne tipkovnice tijekom izvođenja

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

Leave a Comment

Scroll to Top