Файтинги: 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:

Черновик собственного GGPO
Черновик собственного GGPO

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

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

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

88
11
13 комментариев

Так в чем же причина того, что при относительно небольшой конкуренции мелкие студии или инди не выпускают файтинги? Почему, помимо крупных студий и команд разработчиков (Capcom, Namco, Arc System Works, Team Ninja), файтингов практически нет?

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

1
Ответить

именно
Хочешь сделать файтинг
лучше выкини это глупость и сделай сначала Битемап

Ответить

Нехило ты заморочился, удачки.
Будет здорово, если ассет будет приносить какие-то деньги.

1
Ответить

файтинг это жанр для вечеринок.
Когда 2 игрока с 2мя геймпадами начинают развлекаться в одном месте
Очень ситуативная игра. Игроков мало будет
+ очень МНОГО работы с артом. (Спрайты или анимации)
Так что файтинг это не для инди

Ответить

Я с ботами развлекаюсь...

Ответить
Автор

Не могу согласиться, те же мобильные файтинги набирают по 50 лямов скачиваний

Ответить

Некто Кирилл делает файтинг и многое другое в одной упаковке и у него все получается вроде. Правда игра не сетевая https://dtf.ru/indie/2795681-nightfall-shade-kak-my-igru-peresobirali-i-chego-uspeli-sdelat-za-polgoda

Ответить