Saltar al contenido
Menú
← Volver al blog

Unity TouchScreenKeyboard en WebGL de escritorio

Frustrated Unity developer debugging TouchScreenKeyboard issue on desktop

Al trabajar con campos de entrada desplazables de Nova UI en Unity 6, golpeamos un tema frustrante: TouchScreenKeyboard.isSupported estaba regresando. true en plataformas de escritorio plataformas como Windows y macOS. Pero el teclado virtual nunca apareció. ¿Por qué? Debido a que Unity define “apoyo” de forma suelta – si un hardware teclado está disponible, vuelve true, a pesar de un teclado virtual nunca se muestra.

💥 El síntoma en NovaUI TextFieldMobileInput.InputLoop

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

Esta comprobación fallaba: suponía erróneamente que el teclado estaba visible cuando no lo estaba, lo que provocaba pérdida de foco no deseada o salidas de coroutina.

🧠 La corrección correcta

No confíes en TouchScreenKeyboard.isSupported solo. Combinelo con Application.isMobilePlatform para un control de tiempo de ejecución limpio:

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

O si quieres parchear el TextFieldMobileInput en 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;
        }

Esto evita ejecutar código de entrada solo móvil en plataformas que no lo soportan.

Resultado

  • En Android/iOS: TextFieldMobileInput gestiona la entrada del teclado virtual
  • En el escritorio: TextFieldKeyboardInput toma el control limpio
  • Sin errores de teclado, sin coroutines desperdiciados

🧪 Bono Tip

Incluso puede ejecutar esto en Editor a través de un menú contextual o script de validación para asegurar que el prefab no vuelva a habilitar este componente accidentalmente durante las pruebas.

Pensamientos finales

Los quirks de plataforma de Unity vuelven a golpear — pero con un guardia de tiempo libre, sus campos de entrada Nova UI pueden comportarse adecuadamente a través de plataformas.

Nova UI campo de entrada desplazable con lógica de teclado móvil vigilado en tiempo de ejecución
Unity Nova UI: TouchScreenKeyboard lógica a tiempo de ejecución en plataformas no móviles

Leave a Comment

Scroll to Top