Перейти к содержимому
Меню
← Вернуться в блог

Unity TouchScreenKeyboard в настольном WebGL

Frustrated Unity developer debugging TouchScreenKeyboard issue on desktop

Когда работаешь с Прокручиваемые поля ввода Nova UI В Unity 6 мы столкнулись с неприятной проблемой: TouchScreenKeyboard.isSupported Возвращение true на настольных Такие платформы, как Windows и macOS. Но виртуальная клавиатура так и не появилась. Почему? Потому что Unity определяет «поддержку» свободно. аппаратное обеспечение Клавиатура доступна, она возвращается trueНесмотря на то, что a виртуальная клавиатура никогда не отображается.

Симптом в NovaUI TextFieldMobileInput.InputLoop

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

Эта проверка не работала: она ошибочно предполагала, что клавиатура видна, хотя это было не так, что приводило к нежелательная потеря фокуса или выход из корутина.

Правильное исправление

Не полагайтесь на TouchScreenKeyboard.isSupported сам по себе. Объедините его с Application.isMobilePlatform Для чистой проверки времени выполнения:

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

или если вы хотите исправить TextFieldMobileInput в 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;
        }

, это позволяет избежать запуска кода ввода только для мобильных устройств на платформах, которые его не поддерживают.

✅ Результат

  • Android/iOS: TextFieldMobileInput Обработка ввода с виртуальной клавиатуры клавиатуры
  • На рабочем столе: TextFieldKeyboardInput захватывает чисто
  • Никаких вводящих в заблуждение проверок клавиатуры, никаких потраченных впустую рутин.

Бонусный совет

Вы даже можете применить это в редакторе через контекстное меню или скрипт проверки, чтобы убедиться, что префаб не включает этот компонент случайно во время тестирования.

Заключительные мысли

Причуды платформы Unity снова наносят удар, но с однострочной защитой времени выполнения ваши поля ввода Nova UI могут вести себя правильно на разных платформах.

Nova UI прокручиваемое поле ввода с логикой мобильной клавиатуры, защищенной во время выполнения
Unity Nova UI: Охрана TouchScreenKeyboard Логика во время выполнения на немобильных платформах

Leave a Comment

Scroll to Top