Немного о подводных камнях интеграции геймпадов

Наконец дело дошло до интеграции геймпадов!

Немного о подводных камнях интеграции геймпадов

Мое предполагаемое ТЗ самому себе по части геймпада выглядело примерно так:

  • поддерживать всевозмодные варианты геймпадов, а именно: xBox / Playstation / Nintendo / какиой-нибудь ноунейм
  • геймпады должны удовлетворять следующим требованиям (иначе поддерживать не сможем):
    a) наличие 2-х стиков;
    b) наличие D-Pad (4 кнопки на геймпаде слева)
    c) наличие ABXY - кнопок на геймпаде справа (South/East/West/North)
    d) наличие кнопки Start
    e) наличие left/right bumper & trigger кнопок
  • организовать интерфейс таким образом, чтобы была возможность производить настройку игры через гейпад (как и должно быть, + на игровых консолях не будет возможности использовать клавиатуру и мышку)
  • сократить используемые кнопки в игре (до минимума)
  • организовать возможность подключения кода геймпада к уже написанному программному интрефейсу (old Input)
  • дать пользователю возможность гибко настраивать геймпад под свои требования

Предполагалось, что гемпад введем после выхода PC-версии игры. Но последний опрос показал, что людям важна не только возможность настройки управления, но и возможность выбора кигрового контроллера. По этой причине и было принято решение подключить геймпад как можно раньше. Изучив вопрос, пришел к заключению, что нужно брать xBox геймпад 4-й ревизии. Причины выбора:

  • многие знакомые разработчики мне посоветовали именно его
  • он часто используется в играх

Приобрел данное устройство за 5 300 руб. Не знаю, оригинал или нет... Но вроде все работает: беспроводное / проводное подключение на PC и OSX, кнопки, вибрация.

Интеграция с кодом

Как ни старался, но возник ряд проблем связанных с интеграцией.

  • давно вышла новая InputSystem (Unity). Система гибкая, удобная. Поому было решено использовать именно InputSystem. Это привело к небольшой переписи логики существующего кода и пересмотру логики
  • игрвое меню имело ряд проблем, которые возникли при отсутствии мышки. Дело в том, что навигация в меню с помощью геймпада основана на выделении текущего объекта с коготрым взаимодействует пользователь. У нас такого выделения не было, пришлось его ввести, пересмотрев дизайн всего меню
  • вибрация. Удивительно насколько важна вибрация. Осознал это только тогда, когда начал с ней работать. Вибрация - это своего рода "тактильная озвучка", которая доступна только тем, кто играет с геймпадом. Качественная вибрация повышает передачу атмосферы, чувства присутствия. Некачественная (не соответствует происходящему в игре, расходится с анимациями) наоборот, разрушает впечатление и погруженность в игровой процесс.
    Пришлось потратить время на создание целой системы вибрации на:
    - примитивные действия игрока такие как "взять"/"бросить" (незаметная вибрация)
    - вибрация движения (удары, полет, прыжки, неудобное перемещение в присевшем состоянии)
    - внешние реакции (вибрация от перемещения массивных обьектов, например: движение платформ, которые имеют внутренний мотор и вибрация от него передается части помещения)
  • добавлена возможность полного отключения вибрации

Что важно: важно не переборщить с вибрацией.

Пока не добрались, но уже в пути:

Говорят есть возможность использовать 4 вибропривода на геймпаде от xBox. У меня получилось использовать только два:

gamepad.SetMotorSpeeds(low, hight);

Никто не знает как получить доступ к еще двум?

Интеграция с анимацией

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

Схема геймпада для того чтобы не было путаницы с тем что есть триггеры:

Немного о подводных камнях интеграции геймпадов

То есть сила нажатия передается в игру. Этим можно воспользоваться и задавать уровень приседания игрока в зависимости от уровня зажатия триггера.

Аналогичная тема возникла со стиками. Вернее со связью анимации перемещения и стиков. Пришлось учесть тот факт, что игрок может идти вперед с разной скоростью, а не только с максимальной как это происходит в случае если за движение отвечает кнопка.

Интерфейс меню

Как говорится: из песни слова не выкинешь. Так и в случае с геймпадом: просто так в меню геймпад не вставишь.

Пришлось видоизменить вкладку меню, которая отвечает за геймпад.

Ранее наше меню по форме немного напоминало меню из Portal 2: находилось в левой нижней части экрана и по форме было прямоугольным.
Нам было весьма проблемно "вставить геймпад" потому, что он получался "впихнутым" в окно, что даже смотрится неочень. А ведь нуно еще и дать возможность гибкой и интуитивно-понятной настройки клавиш.
По этой причине мы планируем разместить геймпад в центральной части экрана (место там достаточно и вниманием он обделен не будет), а меню разделим на 2 подменю (кнопки), которые раположим слевой и справой стороны экрана как условно показано тут:

Немного о подводных камнях интеграции геймпадов

О поддержке разных геймпадов

Предъявляемые к геймпадам требования о количестве и типам кнопок сделаны для того чтобы была возможность привести все устройства управления к одному общему виду. С одной стороны это позволит разработчикам иметь представление о том как игрок будет играть в нашу игру. С другой стороны мы исключим неподдерживаемые устройства, которые нам не известны. То есть это некая гарантия с нашей стороны (и гарантия со стороны разработчика движка): если у геймпада есть определенный набор кнопок, то игра сможет поддерживать ваш геймпад.

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

Тесты разных геймпадов проводил с помощью программы reWASD. Утилита позвляет "подменять" геймпад xBox на Playstation, переназначать кнопки и многое другое. То есть игра думает, что у вас в руках геймпад от Playstation.

Отмечу, что для полноценного теста игры, нужно иметь, пожалуй, более одного физического геймпада. Пока еще не все протестировано и нужно попробовать подключить к игре одновременно несколько (не менее 2-х) геймпадов и посмотреть как обработать эту ситуацию.

Хотелось бы узнать непосредственно у разработчиков, какой второй геймад вы бы посоветовали дя тестов и нужно ли? Может есть утилита, которая способна создавать виртуальные геймпады?

1414
14 комментариев

Если верить Steam'у, то второй по популярности геймпад это Dualshock

5
Ответить

"Total Controller Users" - это "сумма" всех контроллеров?

Ответить

А стим различает вообще когда подключен боксовский, или просто xinput контроллер? Так же дуалшок обычно используют что-бы по дефолту он выглядел как боксовский, и прячут вообще его стандартные инпуты что-бы избежать путаницы.

Ответить

Жесть, контролёр Xbox доминирует.

Ответить

Ты лево и право в 2022 путаешь? Или я слоупок?

3
Ответить

East - восток, оно?

Ответить

Ты не слоупок

Ответить