Все любят котиков
Прислали с малой родины.
Прислали с малой родины.
Не так давно газовщики запускали газ по стояку, снимали шланги от колонки для пресовки. Всё собрали глянули, вроде не течёт и ушли.
Через пару часов жена замечает что пахнет газом и в панике бежит ко мне, мол, вызывай газовщиков, они намудрили!!! Пускай переделывают!
Еле успакоил и отправил открывать окна, сам пошёл смотреть. До этого ездил на подработку и снимал квартиру у которой утечка газа была из-за долбанутости хозяина, стыков много сделал. Там газовщики разбирались, ну и я мимоходом глянул что и как они делают.
Взял фери, пропенил, действительно течёт. Спросил у жены что они конкретно делали, так как только с работы ехал ещё в момент запуска.
Ну и она рассказала, мол сняли, закрыли, проверили и обратно завинтили. Муфку в общем не поменяли. Поняв в чем причина сходил купил и решил намотать по новой, старая полубому засохла, вот и щели. Снял, намотал и решил закрутить шланги от колонки, в итоге жахнуло так что лампочка в коридоре лопнуло а меня жена увидев дергуемщимся отбила скалкой от желизяки, сам чуть ли не в дыму, не понимаю что произошло. В итоге вырубило свет у всего подъезда. Как пришёл в себя понял, что какой то пидорас кинул провод на газовый стояк.
Начали разбираться, в итоге сука из-за которой газ перекрыли всему стояку решил секономить на электричестве. Как выяснили что это он? У него пожар начался, розетка на кухне загорелась.
З. Ы. - Чукча не писатель, но старался
Наконец дело дошло до интеграции геймпадов!
Мое предполагаемое ТЗ самому себе по части геймпада выглядело примерно так:
- поддерживать всевозмодные варианты геймпадов, а именно: 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. Это привело к небольшой переписи логики существующего кода и пересмотру логики
- игрвое меню имело ряд проблем, которые возникли при отсутствии мышки. Дело в том, что навигация в меню с помощью геймпада основана на выделении текущего объекта с которым взаимодействует пользователь. У нас такого выделения не было, пришлось его ввести, пересмотрев дизайн всего меню
- вибрация. Удивительно насколько важна вибрация. Осознал это только тогда, когда начал с ней работать. Вибрация - это своего рода "тактильная озвучка", которая доступна только тем, кто играет с геймпадом. Качественная вибрация повышает передачу атмосферы, чувства присутствия. Некачественная (не соответствует происходящему в игре, расходится с анимациями) наоборот, разрушает впечатление и погруженность в игровой процесс.
Пришлось потратить время на создание целой системы вибрации на:
a) примитивные действия игрока такие как "взять"/"бросить" (незаметная вибрация)
b) вибрация движения (удары, полет, прыжки, неудобное перемещение в присевшем состоянии)
c) внешние реакции (вибрация от перемещения массивных обьектов, например: движение платформ, которые имеют внутренний мотор и вибрация от него передается части помещения)
в) добавлена возможность полного отключения вибрации
Что важно: важно не переборщить с вибрацией.
Пока не добрались, но уже в пути:
Говорят есть возможность использовать 4 вибропривода на геймпаде от xBox. У меня получилось использовать только два:
```
gamepad.SetMotorSpeeds(low, hight);
```
Никто не знает как получить доступ к еще двум?
Интеграция с анимацией
Оказалось, что триггеры геймпада работают "как курки", а не как кнопки. Если использовать их как кнопки, то игра "чувствуется иначе" и это никуда не годится.
Схема геймпада для того чтобы не было путаницы с тем что есть триггеры:
То есть сила нажатия передается в игру. Этим можно воспользоваться и задавать уровень приседания игрока в зависимости от уровня зажатия триггера.
Аналогичная тема возникла со стиками. Вернее со связью анимации перемещения и стиков. Пришлось учесть тот факт, что игрок может идти вперед с разной скоростью, а не только с максимальной как это происходит в случае если за движение отвечает кнопка.
Интерфейс меню
Как говорится: из песни слова не выкинешь. Так и в случае с геймпадом: просто так в меню геймпад не вставишь.
Пришлось видоизменить вкладку меню, которая отвечает за геймпад.
Ранее наше меню по форме немного напоминало меню из Portal 2: находилось в левой нижней части экрана и по форме было прямоугольным.
Нам было весьма проблемно "вставить геймпад" потому, что он получался "впихнутым" в окно, что даже смотрится неочень. А ведь нуно еще и дать возможность гибкой и интуитивно-понятной настройки клавиш.
По этой причине мы планируем разместить геймпад в центральной части экрана (места там достаточно и вниманием он обделен не будет), а меню разделим на два подменю (кнопки), которые раположим слевой и справой стороны экрана как условно показано тут:
О поддержке разных геймпадов
Предъявляемые к геймпадам требования о количестве и типам кнопок сделаны для того чтобы была возможность привести все устройства управления к одному общему виду. С одной стороны это позволит разработчикам иметь представление о том как игрок будет играть в нашу игру. С другой стороны мы исключим неподдерживаемые устройства, которые нам не известны. То есть это некая гарантия с нашей стороны (и гарантия со стороны разработчика движка): если у геймпада есть определенный набор кнопок, то игра сможет поддерживать ваш геймпад.
Заключение, тесты
Тесты разных геймпадов проводил с помощью программы reWASD. Утилита позвляет "подменять" геймпад xBox на Playstation, переназначать кнопки и многое другое. То есть игра думает, что у вас в руках геймпад от Playstation.
Отмечу, что для полноценного теста игры, нужно иметь, пожалуй, более одного физического геймпада. Пока еще не все протестировано и нужно попробовать подключить к игре одновременно несколько (не менее 2-х) геймпадов и посмотреть как обработать эту ситуацию.
Хотелось бы узнать непосредственно у разработчиков, какой второй геймад вы бы посоветовали для тестов и нужно ли? Может есть утилита, которая способна создавать виртуальные геймпады?
Для лл: чел на видео не верит, что
7 + 5 тоже 12 как и 6 + 6.