Серия «TOTAL RELOAD»
Сечем модели плоскостью
Не думал что шейдер рассчения моделей плоскостью вызовет такой интерес, в том числе и у сеньеров на reddit :) Все еще работал над рассечением моделей. Теперь алгоритм стабильно работает на выпуклых высокополигональных моделях типа таких.
Ради эксперимента добавил тесселляцию, работает :)
Да, была проблема с "карнизами":
Но ее удалось решить:
Модель цилиндра невыпклая, потому есть небольшие наложения на основаниях:
Еще можно двигать плоскость сечения вверрх-вниз и качество проекции вершин на плоскость не пострадает (я быстро попробовал). Но мне это не нужно :)
Интересно, кто-то реализовывал подобный шейдер? Поделитесь скринами/видео?
Добавить игровой контроллер в игру, опрос
Привет всем!
Готовимся к релизу на ПК :) Мы изначально предусмотрели поддержку ПК, OSX, консолей и даже Linux. Игра подразумевает использование геймпада. Добавить контроллер и опубликовать порты предполагали после релиза. Но последние опросы ввели нас в замешательство.
Нам важно знать Ваше мнение! Что вы предпочитаете: контроллер или клаву / мышку?
Поделитесь пожалуйста своим опытом :)
Немного о подводных камнях интеграции геймпадов
Наконец дело дошло до интеграции геймпадов!
Мое предполагаемое ТЗ самому себе по части геймпада выглядело примерно так:
- поддерживать всевозмодные варианты геймпадов, а именно: 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-х) геймпадов и посмотреть как обработать эту ситуацию.
Хотелось бы узнать непосредственно у разработчиков, какой второй геймад вы бы посоветовали для тестов и нужно ли? Может есть утилита, которая способна создавать виртуальные геймпады?
T-Reload: опыт интеграции геймпадов
В последнее время работал над интеграцией геймпадов в T-Reload.
Unity давно выпустила InputSystem, которая значительно отличается от старой Input.
В нашем случае (синглплеерная игра) не возникло проблем при миграции системы ввода с Input -> InputSystem.
Unity выпустила хороший тестовый проект Warriors, который позволяет изучить принцип работы новой системы ввода в действии.
В проекте использовались следующие устройства ввода:
1) Keyboard
2) Mouse (For simulating touchscreen input in the Unity Editor)
3) PlayStation 4 Dualshock Controller
4) Xbox One Controller
5) Nintendo Switch Pro Controller
6) Android Samsung Galaxy S9 (Touchscreen for Virtual Joystick and Virtual Button)
Клавиатура и мышь "воспринимаются" как одно устройсвто, работают. С ними проблем у нас не возникло.
Unity тестировали проект на реальном Xbox One геймпаде. Я не особо разбираюсь в разновидностях, не уверен, но кажется они тестировали игру на этом:
Подключил свой геймпад 4-й ревизии и он почему-то успешно распознался как Xbox One:
Может кто знает как распознать разные версии геймпадов? Тестовый проект этого не умеет делать для геймпада xBox.
А вот разные геймпады Sony определяются по-разному. То есть можно точно знать что подключено: Dualshock или DualSense.
В WarriorsProject Unity использовали PlayStation 4 Dualshock.
Я же приобрел PlayStation 5 DualSense и WarriorsProject его не обнаружил в всписке поддерживаемых геймпадов. Пришлось добавлять.
То есть, получается, что xBox геймпады распознаются все как один, а геймпады Sony распознаются как разные.
Танцы с бубном на этом еще не закончились. Геймпад DualSense подключается по блютузу к разным компам через пень-колоду. До сих по не пойму точно как он коннектится и от чего это зависит. А вот геймпад от xBox подключается по блютузу без вопросов. Да и лампочка помогает видеть состояние xBox-геймпада (включен или нет, что очень удобно). В то же время на DualSense нет индикатора-лампы и непонятно включен он или нет.
С xBox проблем не возникло пока никаких. Ну кроме как impulseTriggers почему-то до сих пор нельзя запустить из коробки (у сони та же проблема).
Геймпад от сони подключается к компу без танцев с бубнами (быстро) если подключать через кабель. Но вот здесь нажатия кнопок почему-то не определяются именно для DualSense:
В сети встречал подобную проблему у NintendoSwitchPro.
Особо удивила вибрация DualSense. Она совсем не работала. Работали все стики, все кнопки, но не вибрация. Я уже начал думать, что геймпад с браком. Случайно подключил его с помощью кабеля и обнаружил, что вибрация все же есть.
То есть у DualSense вибрация работает только при проводном подключении :/Кто бы мог подумать? Нужно читать документацию.
Работа над интерфейсом геймпада в игре
Изучив разные версии отображения кнопок на геймпадах, принял неверное решение: решил провести линию к каждой используемой кнопке и подписать её (так кто-то сделал). В результате много возился с этим и понял, что не использовал опыт предыдущего дизайнера, а повторил его ошибки XD Распиновка геймпада путала игрока, выглядела крайне запутанно (примерно так):
Это дело нас не устроило и мы пришли к такому варианту отображения подписей используемых кнопок:
На этом пока все. Если кто знает, то подскажите где есть список со всевозможными bindingPaths???
Очень нужно знать баиндинги вот этих кнопок: