С детства и начиная с 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:

Попытка в собственное решение отката
Попытка в собственное решение отката

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

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

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

Комментарии (8)


  1. Dimsml
    17.09.2024 20:49

    Мне сначала показалось, что M.U.G.E.N. опенсорцный, ведь под него было 100500 модификаций, но потом я посмотрел и понял, что он просто был бесплатный, а ассеты делали фанаты.


    1. p4p Автор
      17.09.2024 20:49

      Я слышал о M.U.G.E.N но насколько я знаю он больше для 2D


  1. max_zorn
    17.09.2024 20:49
    +2

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

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

    Большие компании могут использовать права на что-то популярное, типа UFC, давить на настальжи по МК или эксплуатировать других персонажей из детства. А инди могут порадовать только чем-то типа skull girls, Them's Fightin' Herds или, упоси г-ди, Terrordrome...

    А за статью спасибо, в том числе и за ссылки на дтф - приятно было вспомнить старые увлечения ))


  1. Zara6502
    17.09.2024 20:49

    почему инди-файтинги редкость?

    потому что файтинги интересны ограниченному числу игроков как и те же спортивные игры. Я игроман со стажем в 35 лет, организовывал соревнования в ВУЗе где я работал среди студентов, файтинги и спорт никогда не попадали в список игр для соревнований, были Quake, CS, Heroes III, Warcraft, Starcraft, NFS. Из очевидного думал будут MK и Tekken, но интерес нулевой, про спорт вообще никто не вспоминает.

    То что по МК есть соревнования я в курсе, тем не менее играть, РЕАЛЬНО играть, в файтинги мало кто умеет. А сколько игроков вообще прошли от корки до корки МК? Я проходил еще первый в DOS, мне такое неинтересно, но в то время играли во все игры которые смогли скопировать с чужих дискет или CD дисков, там не стоял вопрос в том что нравится тебе, у меня вообще осязаемые рамки моих любимых игр сформировались только к 2015 году, когда я просто физически перестал успевать играть во всё подряд.

    Для меня как для игрока нет никаких эмоций в файтингах, там нужна реакция и автоматизм принятия решений по ударам. Я так не умею, я люблю медитативные игры типа X-COM, Phoenix Point, Heroes III, сел, поиграл 5 минут, подумал, сходил в туалет, покушал, съездил по делам, приехал, подумал, опять сделал ход. Мы с женой в Героев одну игру можем играть 3 месяца XD

    И как заметил человек выше, мало кому будет интересен кривой и косой инди-файтинг. Вы видели как выглядят новые МК и Теккен? Мне кажется тут никакой инди не справится. Можно конечно сделать пиксель-арт в духе 8-16 битных приставок, но что-то нет желающих.

    PS: поясню за первое предложение своего ответа, за интерес. Покупают и спортивные игры и файтинги вполне себе хорошо, но играть в них не умеют. Просто собираются компанией и играют во что-то многопользовательское на 2-4 человека, что дети, что их папы. Там главное не умение, а сама компания. Я кстати ни разу не видел человека играющего в FIFA или МК ) но люблю на 360 играть в кинект спортс, даже один, как говорится - игры которые мы потеряли.


  1. MANAB
    17.09.2024 20:49

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