Общее

Mirror - это система для построения многопользовательских возможностей Unity игр. Он построен поверх транспортного уровня связи в реальном времени более низкого уровня и выполняет многие из распространенных задач, необходимых для многопользовательских игр. В то время как транспортный уровень поддерживает любой тип сетевой топологии, Mirror является авторитетной системой сервера; хотя это позволяет одному из участников быть клиентом и сервером одновременно, поэтому вы не обязательно должны использовать выделенный сервер, хоть и имеется такая возможность. Работая в сочетании с интернет-сервисами, это позволяет играть в многопользовательские игры через Интернет без особых усилий со стороны разработчиков.

Mirror ориентирован на простоту использования и итеративную разработку, а также предоставляет полезные функции для многопользовательских игр, таких как:

  • Обработчики сообщений

  • Высокопроизводительная сериализация общего назначения

  • Управление распределенными объектами

  • Синхронизация состояний

  • Сетевые классы: Server, Client, Connection, и т.д.

Зеркало построено из серии слоев, которые добавляют функциональность:

Сервер и Хост

Многопользовательские игры на Mirror включают в себя:

  • Сервер Сервер - это экземпляр игры, к которому подключаются все остальные игроки, когда они хотят играть вместе. Сервер часто управляет различными аспектами игры, к примеру ведёт счет и передает эти данные обратно клиенту.

  • Клиенты Клиенты - это экземпляры игры, которые обычно подключаются к серверу с разных компьютеров. Клиенты могут подключаться по локальной сети или онлайн.

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

Сервер может быть либо “выделенным сервером”, либо “хост-сервером”..

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

  • Хост-Сервер Когда выделенного сервера нет, один из клиентов также играет роль сервера. Этот клиент является “хост-сервером”. Хост-сервер создает единственный экземпляр игры (называемый хостом), который действует одновременно как сервер и клиент.

На диаграмме ниже представлены три игрока в многопользовательской игре. В этой игре один клиент также выступает в качестве хоста, что означает, что сам клиент является “локальным клиентом”. Локальный клиент подключается к хост-серверу, и оба они запускаются на одном компьютере. Два других игрока являются удаленными клиентами - то есть они находятся на разных компьютерах, подключенных к главному серверу.

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

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

Instantiate и Spawn

Когда вы создаете однопользовательскую игру на Unity, вы используете GameObject.Instantiate для создания объектов в реальном времени. Однако в многопользовательской системе сам сервер должен “спавнить” игровые объекты, чтобы они были активны в сетевой игре. Когда сервер спавнит игровые объекты, он запускает создание игровых объектов на подключенных клиентах. Система спавна управляет жизненным циклом игрового объекта и синхронизирует состояние игрового объекта в зависимости от того, как вы настроили игровой объект.

Для получения более подробной информации о сетевом создании экземпляров и спавне, прочитайте документацию о спавне GameObjects.

Игроки и Локальные игроки

Mirror обрабатывает игровые объекты иначе, чем НЕ-игровые объекты. Когда новый игрок присоединяется к игре (когда новый клиент подключается к серверу), объект этого игрока становится игровым объектом как “локальный игрок” на его клиенте, и Mirror связывает соединение игрока с игровым объектом этого самого игрока. Mirror связывает один игровой объект игрока с каждым человеком, играющим в игру, и направляет сетевые команды к этому отдельному игровому объекту. Игрок не может вызвать команду для игрового объекта другого игрока, только для своего собственного.

Для получения более подробной информации смотрите документацию по Игровым GameObjects.

Authority (Власть)

Как сервер, так и клиенты могут управлять поведением игрового объекта. Понятие “Authority” относится к тому, как и где осуществляется управление игровым объектом. Mirror основано на “полномочиях сервера” в качестве состояния по умолчанию, когда Сервер имеет полномочия над всеми игровыми объектами. Игровые объекты игрока являются особым случаем и рассматриваются как имеющие “местные полномочия”. Возможно, вы захотите создать свою игру, используя другую систему полномочий - более подробную информацию смотрите в разделе Network Authority.

Last updated