Unreal Engine 4 экранная клавиатура для геймпада (Blueprints)
Всем привет! Решил сделать в UE4 ввод с экранной клавиатуры для USB геймпада подключенного к PC.
Весь функционал располагается в двух виджетах: один содержит поле ввода, другой саму логику клавиатуры.
Настоятельно рекомендую к ознакомлению серию уроков по созданию виджетов управляемых геймпадом
Вызов экранной клавиатуры
Для удобного вызова виджета клавиатуры я сделал функцию ScreenKeyboardOn в Game Instance.
Эта функция вызывается в виджете, который содержит поле ввода текста.
Для того, чтобы виджет реагировал на нажатие кнопки геймпада необходимо переопределить (Override) функцию OnKeyDown в самом виджете.
В функции OnKeyDown добавляю значения для нажатия кнопок геймпада, после этого на нужную мне кнопку назначаю функцию ScreenKeyboardOn из Game Instance проекта.
Виджет клавиатуры
Виджеты в которых предполагаются действия геймпадом необходимо сделать фокусируемым.
Так как я не программист, то логику делал на Blueprints
Для начала необходимо установить шрифты и определить кнопки задействованные в виджете, так же из родительского виджета берется название
Шрифт я устанавливаю для всех виджетов в игре, но это не обязательно.
Кнопки виджета я сохраняю в массив, в этой же функции устанавливаю фокус на определенную кнопку.
Цикл вызывающий функцию Start из кастомных кнопок позволяет геймпаду менять стиль кнопки.
Одновременно с этим устанавливаем название клавиатуры из родительского виджета
Кнопки действий
На случай случайного нажатия мыши вне клавиатуры вызывается функция закрытия CloseKeyboardWidget
Удаление последнего символа
Заглавные буквы
Ввод записанного значения в текстовое поле, из которого был вызван виджет клавиатуры
Кнопки клавиатуры
Записываем буквы и выводим результат на экран
Пример:
Кнопки геймпада
В виджете который будет вызывать клавиатуру необходимо назначить нажатие кнопки геймпада
В виджете клавиатуры можно назначить удаление и Shift на кнопки геймпада
Навигация в клавиатуре
Включение/отключение кнопки
В родительском виджете создаю функцию, которая включит кнопку Save если символов введено больше трех. Это не обязательно.
На этом все. Пишите в комментариях как на ваш взгляд можно улучшить этот виджет, так же буду рад ссылкам на подобные решения.
Хеш-теги для индексации: #ue4 #gamedev #unrealengine #unrealengine4 #blueprints #gamepad #input #gamepadinput #screenkeyboard #keyboard #key #tutorial #indiedev