dn54: (Default)
[personal profile] dn54
Несколько месяцев назад я смотрел на блюпринты в UE с полным непониманием и ужасом. Однако, через некоторое время чуть-чуть освоился и сейчас уже чувствую себя с ними вполне комфортно.

Периодически натыкаюсь на разные задачи, которые решаю с интересом и скрипом мозгов. Например, сабж. Игровое меню, вызываемое кнопкой Escape уже давно стало индустриальным стандартом. И сделать его тут довольно просто. Таким же стандартом стал и возврат в игру по второму нажатию Esc. И вот это внезапно оказалось сделать не так просто.

Камень преткновения - после вызова меню неплохо бы отбирать управление у игрока. Чтобы сослепу не забрёл куда не надо, например. Однако реакция на кнопки клавиатуры идёт через тоже самое игровое управление, и поэтому так Esc в меню уже не будет работать.

Поискал и нашёл минимум три решения.

1) Не отключать управление. Создавать типа второго игрока, которого нигде нет, и передавать управление всего кроме Esc ему пока меню открыто. С этим я разбираться не стал, ибо выглядит как какой-то костыль.

2) Не отключать управление. В блюпринтах интерфейсов есть специальная нода "Listen for input action", если ей включить опцию "consume", то она монополизирует управление пока меню на экране. Вроде бы это именно то, что доктор прописал? Но есть пара нюансов:
а) Она работает только для actions, то есть нажатия кнопок. А для axises (мышь, стики) вроде бы не работает.
б) Одна нода работает только для одного action.
То есть, нужно создавать их для каждого действия отдельно. Это хороший вариант, если нужно сделать, например, чтобы кнопки в меню оставались рабочими, но работали как-то иначе чем в игре. А если нужна только одна Esc, то для всего остального нужно будет делать затычки. И если потом позже нужно будет добавлять новые действия, то для каждого придётся тоже делать затычку.

3) Отключать управление как обычно. Найти в блюпринте интерфейса штатную функцию OnKeyDown и сделать ей Override, куда добавить обработку Escape. Самый короткий и простой вариант, если нужна только одна кнопка. Я остановился на нём.
Нюанс: здесь нельзя принимать стандартные actions, кнопка здесь будет захардкожена. Если потом нужно будет поменять кнопку или добавить, то придётся проходить по всем меню и вручную править.

Менять Escape на другую кнопку для выхода из меню, конечно, никому в здравом уме в голову не придёт, а вот добавлять (например, кнопку на геймпаде) уже может быть нужно.

В любом случае, несколько недоумеваю: это супер-стандартный сценарий использования, нужно такое может быть буквально для каждой первой игры. Почему создатели не предусмотрели для этого какое-то каноничное решение для меня некоторая загадка.
This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

Profile

dn54: (Default)
dn54

June 2025

S M T W T F S
12345 67
891011121314
15161718192021
22232425262728
2930     

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 11th, 2025 10:13 am
Powered by Dreamwidth Studios