Не все игры могут похвастаться полной поддержкой геймпада, особенно среди сегмента инди-игр. Но те проекты, которые не игнорируют запросы игроков и дают возможность использовать не только клавиатуру и мышь, значительно выделяются среди остальных. Особенно на рынке США, где аудитория использующая геймпады достаточно большая.

В разных проектах на Unreal Engine добавление поддержки геймпада имеет свои особенности, и если добавить управление в игре обычно не составляет труда, то вот с игровыми меню (базирующимися на Widget Blueprint) могут возникнуть сложности. Учитывая особенности движка и было составлено это руководство.

Эта статья является одной из двух частей руководства, посвящённого поддержке геймпада в играх разрабатываемых в Unreal Engine 5:
  1. Как добавить управление геймпадом для игры в Unreal Engine (UE5)
  2. Как добавить управление геймпадом в меню игры Unreal Engine (UE5)

Создание класса кнопок

Первое, что нужно сделать, это новый класс для кнопок, который я назвал «BP_Button»: ПКМ — Blueprint Class — Button (parent class).

Открыв созданный блюпринт кнопки я добавил в него 3 переменных типа Button Style: MouseStule; KeyNotSelected; KeySelected. И задал для них цвета в нормальном состоянии кнопки, при наведении и по нажатию. Затем создал функцию определяющую кнопку, которую необходимо выделить и назвал её CheckFocus. Логика этой функции следующая:

CheckFocus — Branch (связан с Is Hovered): ЕСЛИ ПРАВДА — Set Keyboard Focus — Set Style (In Style связан с переменной Mouse Style); ЕСЛИ ЛОЖЬ — Set Style (In Style связан с Select (Index — Has Keyboard Focus; False — KeyNotSelected; True — KeySelected) ).

Далее, требуется добавить другую функцию, которая будет своеобразной заменой Event Tick в вызовах предыдущей функции CheckFocus, ее я назвал «Start», а логика состоит всего из 2 нод: Start — Set Timer by Function Name (Function Name: CheckFocus; Time: 0.1; Looping: ON).

Настройка Меню (Widget Blueprint)

Когда блюпринт кнопки создан, можно перейти непосредственно в меню, которому требуется поддержка геймпада и в окне Designer заменить все ранее созданные кнопки на BP_Button. Для этого необходимо выделить BP_Button в палитре (Palette), затем в иерархии (Hierarchy) выделить кнопку, нажать ПКМ — Replace With — Replace With BP_Button. И последним, что потребуется сделать в окне Designer, будет добавление прозрачной (альфа равная 0,0 во всех состояниях) кнопки растянутой на весь холст.

Теперь можно перейти в окно Graph и настроить кнопки. Для кнопки растянутой на весь холст (я её назвал Button_BG) я задал следующую логику: On Clicked (Button_BG) — Set Keyboard Focus (связан с Button Level 0 (кнопка которую я хочу выделить первой) ). Это даст возможность нажав на кнопку «выбора» на геймпаде сразу сфокусироваться на кнопке которая должна выделяться первой.

Также я добавил логику для выделения остальных кнопок, когда игрок их попытается выбрать с помощью геймпада или клавиатуры: Event Construct — SET Array (созданная мною переменная типа BP_Button и множественным типом контейнера; связана с Make Array, к которому подключены все кнопки из меню) — For Each Loop (связан с SET Array) — Start (Target связан с Array Element) — Set Keyboard Focus (Target связан первой кнопкой меню, которую я хочу выделить).

После этих действий меню должно полностью поддерживать геймпад, клавиатуру и мышь. Хочу обратить внимание, что располагать элементы меню необходимо параллельно друг другу, иначе они могут оказаться в «слепой зоне» геймпада. А если у вас возникли вопросы или сложности с реализацией, пишите в комментарии и мы обязательно поможем!

Great Creator