04 апреля 2025

🎮🔌 4 cамых популярных фреймворка для разработки онлайн-игр на Unity

Делаю игры и пишу про игры
Едва ли не самое важное решение при разработке мультиплеерного проекта — выбор сетевого фреймворка. Именно он отвечает за то, чтобы игроки могли взаимодействовать друг с другом без задержек и ошибок синхронизации. В этой статье мы кратко рассмотрим все наиболее популярные фреймворки для разработки онлайн-игр, выделим их сильные и слабые стороны и приведем примеры игр, выпущенных на них.
🎮🔌 4 cамых популярных фреймворка для разработки онлайн-игр на Unity

В мире разработки игр на Unity существует немало сетевых фреймворков – поначалу новичок даже может запутаться в их многообразии. Некоторые были созданы самой компанией Unity Technologies (например, Netcode for GameObjects), другие же являются сторонними решениями (Mirror, FishNet, Photon). При выборе подходящего инструмента важно принимать во внимание особенности проекта — от жанра игры до требований к масштабу серверной инфраструктуры и наличию серверной логики, работающей отдельно от клиента. Инструмент, который хорошо работает в не очень сложной пошаговой игре типа Heartstone может показывать себя гораздо хуже в более крупных проектах вроде Call of Duty: Mobile с realtime-мультиплеером и большим количеством одновременных игроков в рамках одной сессии.

Однако для начала давайте разберемся, что вообще представляют из себя сетевые фреймворки и зачем они нужны разработчикам.

Сетевой фреймворк служит своего рода прослойкой между клиентским кодом (то есть игрой) и транспортным уровнем передачи данных. Он берет на себя рутинные задачи по сериализации данных игровых объектов, распределению нагрузок между клиентом и сервером, осуществлению RPC-вызовов и управлению синхронизацией состояния игры (позиции, анимации, здоровье, окружение на уровне и т. д.). Без такого фреймворка разработчику пришлось бы вручную создавать логику для работы всей вышеперечисленной логики.

Фреймворк же предоставляет готовые инструменты для объявления сетевых объектов и вызова методов на удаленных клиентах или сервере, решая проблемы с дублированием логики и разрешением конфликтов при обновлении состояния. Кроме того, он обычно включает высокоуровневые механизмы оптимизации — интерес-менеджмент, предсказания (client-side prediction), интерполяцию, компенсацию лага (lag compensation), — которые позволяют игре работать максимально плавно и корректно даже при колебаниях качества соединения.

В целом, сетевые решения можно условно разделить по нескольким критериям:

  1. Модель работы (Client-Server, Peer-to-Peer, Dedicated Server, Listen Server).
  2. Тип синхронизации (событийная, реплицированная через объекты, ручной RPC-подход).
  3. Производительность (пропускная способность, задержки, потребление ресурсов).
  4. Удобство интеграции (API, документация, пользовательский опыт, поддерживаемые платформы).
  5. Архитектура (включает ли в себя фреймворк серверную часть, поддерживает ли облачные сервисы).
Скриншот из игры Call of Duty: Mobile
Скриншот из игры Call of Duty: Mobile

Photon

Photon — это целая экосистема сетевых решений от Exit Games, включающая несколько продуктов, ориентированных на разные типы проектов: от простых кооперативных игр до сложных детерминированных проектов. Наиболее востребованы следующие продукты для Unity:

  1. Photon PUN (Photon Unity Networking) — «классическая» версия Photon, давно используемая в производстве. Облачный сервис (с опцией Self-Hosted) со встроенными компонентами для синхронизации объектов, RPC-вызовов и т. д.
  2. Photon Fusion — более современный вариант с гибкой архитектурой и режимами, позволяющими использовать полноценный авторитетный сервер.
  3. Photon Quantum — мощное решение для детерминированной симуляции, полезное в соревновательных играх, требующих точного расчета, минимальных лагов.

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

В Photon Unity Networking по умолчанию используется облачный сервер Photon, к которому подключаются все клиенты. Тем не менее, при необходимости есть возможность хостить собственный сервер. Синхронизация основана на концепте комнат. Все синхронизируемые объекты (имеющие компонент PhotonView) синхронизируются через периодические события (пакеты), а RPC (Remote Procedure Call) используется для вызовов функций на удаленных клиентах.

Photon Unity Networking имеет ряд ограничений, среди которых следует выделить отсутствие авторитетного сервера из коробки – реализовывать его придется самостоятельно. Стоимость использования фреймворка зависит от показателя CUU (Concurrent Users, одновременные пользователи).

Этот фреймворк хорошо подойдет для обучения основам разработки сетевых игр и для создания проектов небольшим онлайном до 16 игроков.

С помощью PUN, например, сделана игра Pixel Gun 3D

Скриншот из игры Pixel Gun 3D
Скриншот из игры Pixel Gun 3D

Photon Fusion является более современной альтернативой PUN. Он позволяет использовать авторитарный сервер, на котором обрабатывается вся игровая логика и рассылается клиентам, и предоставляет более гибкие возможности для синхронизации игрового состояния. Производительность у Photon Fusion лучше, чем у PUN, так как используется улучшенная система отправки пакетов.

Этот фреймворк больше подходит для крупных и сложных игр с большим количеством игроков.

Photon Quantum является наиболее продвинутым решением в этой линейке. Он позволяет создавать детерминированную симуляцию путем запуска одной и той же логики на всех клиентах, результаты выполнения которой будут идентичны при одинаковых входных данных. Идея заключается в том, что фреймворк пересылает между клиентами только пользовательский ввод, на основании которого и работает игровая логика. Photon Quantum позволяет разработчикам сфокусироваться на разработке игровых механик, а не на написании сетевого кода и логики синхронизации. Фреймворк прекрасно подходит для создания игр, где крайне важны тайминги и отсутствие задержек (например, в файтингах или шутерах).

Продукты от Photon являются мощными и надежными решениями, на основе которых уже создано множество игр. Тем не менее, они обладают своими минусами и подводными камнями. Отдельно стоит учитывать, что продукты Photon в отличие от полностью бесплатных open-source аналогов являются условно-бесплатными, а стоимость использования напрямую зависит от количества одновременных игроков. Если вы создаете небольшой учебный проект или ваша коммерческая игра находится на стадии разработки, то вы можете использовать бесплатный план, в который входят 20 одновременных игроков. Если же ваша игра с использованием, допустим, Photon Fusion набрала популярность и в нее одновременно играет до 1000 человек, ежемесячная плата за использование фреймворка составит 250$.

Netcode for GameObjects

Netcode for GameObjects — официальная сетевая библиотека, разработанная Unity Technologies. Ее целью является предоставление универсального стандарта для сетевых проектов прямо из коробки в экосистеме Unity, а также плотную интеграцию с сервисами игрового движка.

Главными преимуществами данной библиотеки являются официальная поддержка от разработчиков игрового движка и достаточно низкий порог входа: библиотека позволяет быстро и просто настроить базовую логику для синхронизации игровых сущностей. Netcode for GameObjects рассчитан на средние по масштабу проекты, особенно если они имеют кооперативную или соревновательную составляющую, но при этом не нуждаются в экстремальной оптимизации для большого количества игроков.

Тем не менее, следует учитывать, что фреймворк достаточно новый и все еще находится в стадии активной разработки. Из чего вытекают не самая лучшая оптимизация и риски возникновения различных багов. Важно еще отметить то, что на данный момент с помощью Netcode for GameObjects сделано относительно мало игр, поэтому по многим моментам еще нет наработанной практики, а сообщество у фреймворка не такое большое, как у аналогов от сторонних разработчиков. Из более-менее серьезных проектов можно выделить лишь игру Boss Room, которая является даже не полноценным коммерческим проектом, а лишь демонстрацией возможностей фреймворка.

Boss Room – игра, которая служит для демонстрации возможностей Netcode for GameObjects
Boss Room – игра, которая служит для демонстрации возможностей Netcode for GameObjects

Исходный код данной игры доступен по следующей ссылке.

#️⃣ Библиотека шарписта
Больше полезных материалов вы найдете на нашем телеграм-канале «Библиотека шарписта»

FishNet

FishNet — набирающий популярность сетевой фреймворк с открытым исходным кодом, который распространяется бесплатно и развивается силами небольшой команды и сообщества. Разработчики фреймворка делают упор на производительность, гибкую архитектуру с авторитарным сервером и удобную работу с сетевыми объектами Подход с авторитарным сервером гарантирует, что ключевая геймплейная логика будет выполняться именно на нем, а клиенты выступают лишь источниками входных данных. Такой подход позволяет сократить риск читерства и обеспечить детерминированность, что особенно важно в динамичных экшен-играх, где ключевую роль играет точная синхронизация состояний игровых объектов. При этом FishNet предоставляет средства для предсказания и интерполяции, что заметно упрощает создание плавного игрового опыта даже при нестабильном сетевом соединении.

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

Несмотря на все вышеперечисленные преимущества, следует понимать, что FishNet обладает достаточно высоким порогом входа и вряд ли подойдет новичкам. Также учитывайте, что фреймворк поддерживается небольшой командой разработчиков и сообществом, что может влиять на выход новых версий и исправление багов.

Фреймворк прекрасно подойдет для мультиплеерных и кооперативных проектов небольших и средних размеров.

С помощью FishNet была разработана инди-игра Cat Warfare.

Скриншот из игры Cat Warfare
Скриншот из игры Cat Warfare

Mirror

Mirror — еще одно популярное и надежное open-source решение, которое появилось на основе когда-то встроенного в Unity сетевого фреймворка UNet. Сообщество взяло код UNet, исправило часть унаследованных проблем и продолжило развивать проект, внедряя новые возможности. За несколько лет Mirror стал де-факто стандартом для независимых студий, предпочитающих open-source.

Большинство проектов на Mirror строится на стандартной модели авторитарного сервера. Доступно множество различных вариантов сетевых вызовов, в том числе стандартные Command и RPC, а также более продвинутые варианты.

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

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

На Mirror выпущено множество популярных игр, среди которых VR-шутер Population: ONE, мобильный battle-royale Zooba, самобытный кооперативный инди-проект Liar's Bar и множество других.

Скриншот из игры Liar's Bar
Скриншот из игры Liar's Bar

Заключение

В целом, выбор подходящего сетевого фреймворка для Unity зависит от множества факторов: от жанра игры и ее масштабов до имеющегося у команды опыта и бюджета на обслуживание серверов или пользование самим фреймворком. И вряд ли на вопрос «А какой же фреймворк мне все-таки выбрать?» получится найти идеально верный ответ. Photon упрощает жизнь за счет облачной инфраструктуры, Netcode for GameObjects приглянется тем, кто предпочитает экосистему Unity и официальную поддержку, FishNet и Mirror, в свою очередь, ценятся разработчиками за открытость исходного кода и активное сообщество.

Впрочем, я бы рекомендовал смотреть в сторону Photon Fusion, если вы намерены разрабатывать серьезную мультиплеерную игру, или Photon Quantum, если во главе угла стоит детерминированность и точность симуляции, а вы не боитесь ECS-подхода. Если же вы предпочитаете open-source решения, то наилучшим выбором будет именно Mirror из-за своей популярности и надежности.

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

 
 

ЛУЧШИЕ СТАТЬИ ПО ТЕМЕ

Подпишись

на push-уведомления