3

Файтинги: cложности и особенности при разработке или почему инди-файтинги редкость?

С детства и начиная с PS1 я любил файтинги, и так уж вышло, что я стал разработчиком игр. Частенько, для обкатки технологий или просто ради удовольствия, я веду разработку пет-проектов. Естественно, такой жанр, как файтинги, я не смог обойти стороной. Тут на dtf я писал о разработке.

Жанр файтинг игр специфичен и сложен в разработке. К примеру, на ПК одна или две файтинг игры в реалистичном сеттинге, одна из них - это Undisputed на Unity. Игра выглядит красиво, но, к сожалению, из-за плохого сетевого кода не дает насладиться процессом. Нередко игрок пропускает "фантомные" удары, когда он уже отошел от противника. С аркадными файтингами дела обстоят лучше, нишу крепко заняли MK, SF, Tekken и несколько других менее популярных игр. Так в чем же причина того, что при относительно небольшой конкуренции мелкие студии или инди не выпускают файтинги? Почему, помимо крупных студий и команд разработчиков (Capcom, Namco, Arc System Works, Team Ninja), файтингов практически нет? Попробуем ответить на этот вопрос и раскрыть тему подробнее.

Если для других жанров есть множество готовых решений и ассетов, то путь разработки файтингов тернист и нетривиален. Сетевой код для файтинг игр специфичен и сложен, так как все меняется очень быстро, и классические приемы, используемые в шутерах для борьбы с задержкой, тут работают плохо.

Обычно для файтингов используют p2p соединения и обмениваются только вводом между игроками. Все остальное просчитывается локально и синхронизируется за счет детерминизма.

Детерминизм — это идея, что повторение определенного действия с тем же начальным условием всегда приведет к тому же результату.

Andrea "Jens" Demetrio

И тут возникают первые трудности у инди. Какой движок выбрать для разработки файтинга? Самый популярный у инди Unity не детерминирован "из коробки" (как и UE, Godot). Если реализовать сетевое взаимодействие на Unity и обмениваться только вводом, результат у клиентов будет разный. Золотым стандартом при разработке файтингов считается откат сетевого кода и библиотека GGPO. Принцип работы отката сетевого кода заключается в том, что мы предсказываем ввод противника, производим действия на основе предсказания, и если они были ошибочны (после получения ввода), мы откатываемся до верных действий. Хотя откат и звучит страшно, это происходит быстро, и игрок не замечает задержек и фактического "отката". Есть и Delay-based решение, но оно работает хуже и не так отзывчиво, как откат сетевого кода.

Так почему мы не можем просто установить GGPO на Unity и создать файтинг мечты? Ответ банален: GGPO не адаптирован для Unity и даже не имеет стабильной C# версии. Даже если вам удастся портировать GGPO, физика Unity не детерминирована, и вам придется заменить ее другим решением, а Unity использовать только для рендеринга (стоит отметить, что физика в пакете ECS заявлена как детерминированная). Кроме того, сетевая часть на пути разработки файтингов не единственная преграда: ввод, анимации, персонажи, баланс и т. д. К примеру, вы не можете просто использовать Unity Animator и быть счастливым, так как он не гибок, его нельзя переиспользовать, и отгадайте что? Аниматор не детерминирован. Для анимации вам придется использовать API аниматора, чтобы вручную управлять анимациями.

Стоит упомянуть, что для Unity есть ассет UFE 2, который использует сетевой код отката и позволяет создать файтинг, но:

  • Использует устаревший Photon PUN

  • Ужасный исходный код и скрипты под 2к строк кода

  • Стоимость исходников 500$

  • Плохая оптимизация

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

По какому пути пошел я и к чему пришел?

Первым делом после заморозки решения на UFE я предпринял попытки написать свое решение, аналогичное GGPO:

Файтинги: cложности и особенности при разработке или почему инди-файтинги редкость?

Довольно быстро я осознал, что это решение затянет меня на многие месяцы разработки, отладки и оптимизации. Сетевые игры сложно дебажить, и это весело только в первые несколько дней. Из плюсов - я лучше раскрыл для себя тему отката и попробовал Photon Fusion, который использовался для синхронизации.

Вторым и актуальным на данный момент решением является использование Photon Quantum для Unity. Quantum - это чудесная ECS сетевая библиотека, которая использует откат, по умолчанию детерминирована и реализует собственную физику. Я прилично продвинулся в решении на Quantum, хотя и занимаюсь петом в свободное время. ECS позволяет эффективно структурировать логику, отделять ее от представления и на выходе получаем хорошую производительность. Для анимаций используется Playables API, которое позволяет гибко управлять таймингом анимации. Фактически анимация проигрывается на стороне Quantum, а Unity Playables используется только для рендеринга. Порог входа в Quantum высокий из-за небольшого количества обучающих материалов, платных примеров и относительно небольшой распространенности.

По завершению разработки я планирую распространять решение как ассет, который можно использовать не только для файтинг игр но и для любых других 3d сражений. С удобным api, ui для настроек и удобной оболочкой вокруг Quantum. В теории это решение откроет для инди доступ к разработке новых жанров.

Мой канал в телеграмм Unity Show-Off для поиска вдохновения.

Мой блог ggdev.

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества