Задать вопрос
@svema0705

Как убрать постоянную потерю фокуса в input field при нажатии enter в new input system?

В проекте использую New Input System и в одной из сцен есть несколько Input Field TextMeshPro расположенных в одном из нескольких Canvas, также в сцене присутствуют компоненты Event System и Input System UI Input Module для обработки событий взаимодействия игрока с UI, и в целом всё это работает пока я не начал развивать управление горячими клавишами

При нажатии клавиши Enter в активном поле ввода все поля ввода расположенные в сцене становятся недоступными для ввода - любая попытка как-то вернуть фокус приводит к сбросу этого фокуса в следующем кадре и так постоянно. Я пробовал различные способы, которые приходили в голову - отключал и включал обратно поля ввода, пытался принудительно возвращать фокус, пытался исправить это корутиной с отложенным на 1 кадр возвратом фокуса и всё это не сработало. Другие клавиши такого бага не вызывают. В New Input System в активной Action Map есть клавиша Enter, которая генерирует событие отправки через static event Action для различных целей подтверждения выбора с клавиатуры

New Input System я реализовал в виде синглета чтобы было удобно подписываться на события из разных частей кода

Как я понимаю, при нажатии Enter срабатывает событие отправки которое сбрасывает фокус и где-то внутри оно зацикливается где я так и не понял
Существует ли какое-то +/- работающее решение?
  • Вопрос задан
  • 112 просмотров
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Академия Эдюсон
    Разработчик игр на Unity + ИИ
    6 месяцев
    Далее
  • Нетология
    Разработчик игр на Unity
    13 месяцев
    Далее
  • Skillbox
    Middle-разработчик игр на Unity
    3 месяца
    Далее
Решения вопроса 1
opium
@opium
Просто люблю качественно работать
enter у тебя, похоже, ловят два обработчика сразу: InputSystemUIInputModule шлёт Submit (а TMP_InputField сам реализует ISubmitHandler), плюс твой глобальный Action на тот же Enter. Отсюда и петля — фокус сбрасывается, ты возвращаешь, а на следующем кадре снова прилетает Submit.

Проверяется быстро: временно убери биндинг Enter из Submit в InputSystemUIInputModule — пропал баг, значит дело в этом.

Дальше разделяй action map'ы: пока `EventSystem.current.currentSelectedGameObject` — активный `TMP_InputField`, глобальный обработчик Enter должен просто выходить. И сверь тип action Submit — обязан быть Button, не Value/Pass Through.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы