Przejdź do treści
Menu
← Wróć do bloga

Unity TouchScreenKeyboard w desktopowym WebGL

Frustrated Unity developer debugging TouchScreenKeyboard issue on desktop

Podczas pracy z Pola wejściowe Nova UI do przewijania w Unity 6, natknęliśmy się na frustrującą kwestię: TouchScreenKeyboard.isSupported wracał true Desktop platformy takie jak Windows i macOS. Ale wirtualna klawiatura się nie pokazała. Dlaczego? Ponieważ Unity definiuje „wsparcie” luźno – jeśli sprzęt klawiatura jest dostępna, zwraca true, nawet jeśli miękka klawiatura nigdy nie jest wyświetlana.

Objaw w NovaUI TextFieldMobileInput.InputLoop

if (touchScreenKeyboardController.Status != TouchScreenKeyboard.Status.Visible)

Ten warunek nie działał prawidłowo: błędnie zakładał, że klawiatura jest widoczna, co powodowało niepożądaną utratę fokusu lub zakończenie korutyny.

Właściwa poprawka

Nie polegaj na TouchScreenKeyboard.isSupported Sam. Połącz to z Application.isMobilePlatform dla czystej kontroli runtime:

void Awake()
{
    if (!Application.isMobilePlatform)
    {
        Debug.Log("TextFieldMobileInput disabled on non-mobile platform.");
        this.enabled = false;
    }
}

lub jeśli chcesz łatać TextFieldMobileInput w NovaUI

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;
        }

Unika to uruchamiania tylko mobilnego kodu wejściowego na platformach, które go nie obsługują.

Wynik

  • Na Android / iOS: TextFieldMobileInput obsługuje miękkie wejście klawiatury
  • Na pulpicie: TextFieldKeyboardInput Przejmuje czysto
  • Żadnych wprowadzających w błąd kontroli klawiatury, żadnych zbędnych korutyn

Name

Można to nawet wyegzekwować w Edytorze za pomocą menu kontekstowego lub skryptu walidacyjnego, aby upewnić się, że prefab nie włączy tego komponentu przypadkowo podczas testowania.

Ostateczne rozważania

Platforma Unity znów atakuje – ale z jednoliniowym strażnikiem, pola wejściowe Nova UI mogą zachowywać się prawidłowo na różnych platformach.

Nova UI skalowalne pole wejściowe z mobilną logiką klawiatury strzeżony w runtime
Unity Nova UI: Ochrona TouchScreenKeyboard logika w czasie pracy na platformach niemobilnych

Leave a Comment

Scroll to Top