Network Manager

Network Manager - это компонент для управления сетевыми аспектами многопользовательской игры. Он объединяет множество полезных функций в одном месте и максимально упрощает создание, запуск и отладку многопользовательских игр.

Network Manager включают в себя:

  • Управление состоянием игры

  • Управление спавном игроков

  • Управление сценами

  • Дебаггинг

  • Кастомизацию

Начало работы с Network Manager

Network Manager - это основной управляющий компонент многопользовательской игры.Чтобы начать, создайте свой новый Network Manager из шаблона скрипта, который идёт в Mirror. Создайте пустой игровой объект в вашей начальной сцене и добавьте недавно созданный компонент Network Manager. Недавно добавленный компонент Network Manager должен выглядеть следующим образом:

Инспектор для Network Manager'a в редакторе позволяет вам настраивать и контролировать многие вещи, связанные с сетевым взаимодействием.

Примечание: У вас может быть только один активный Network Manager в каждой сцене, потому что это синглтон. Не размещайте компонент Network Manager на сетевом игровом объекте (который имеет компонент Network Identity), поскольку Mirror отключает их при загрузке сцены.

Транспорты

Mirror использует отдельный компонент (производный от транспортного класса) для подключения по сети. Новым транспортом по умолчанию является KCP (который использует UDP, а не TCP). Такой архитектурный подход разделения транспорта на отдельные компоненты позволяет разработчикам игр выбирать транспорт, который наилучшим образом соответствует их игровым потребностям. Изменить транспорт так же просто, как поменять местами компонент в объекте Network Manager и назначить его полю Transport.

Транспорты доступны для TCP, UDP, WebGL, Steam и многих других. Кроме того, существует multiplex transport, который позволяет совместно использовать два транспорта на сервере, например Telepathy и WebSockets, так что игроки с настольных компьютеров и браузеров могут беспрепятственно играть вместе на одном сервере. Смотрите Транспорты для получения более подробного содержания.

Управление состоянием игры

Сетевая многопользовательская игра может запускаться в трех режимах - как клиент, как выделенный сервер или как хост, который одновременно является и клиентом, и сервером.

Если вы используете Network Manager HUD, он автоматически сообщает Network Manager'у, в каком режиме запускаться, в зависимости от того, на какую кнопку нажимает игрок. Если вы пишете свой собственный пользовательский интерфейс, который позволяет игроку запустить игру, вам нужно будет вызывать методы Network Manager'a, чтобы запустить игру в определенном режиме. Этими методами являются:

  • StartClient

  • StartServer

  • StartHost

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

  • В клиентском режиме игра пытается подключиться к указанному сетевому адресу. Полное доменное имя (FQDN) также может быть использовано в качестве сетевого адреса, например: "game.example.com ".

  • В режиме сервера или хоста игра прослушивает входящие соединения на localhost который включает в себя IP-адрес серверной машины в локальной сети.

Управление спавном

используйте Network Manager чтобы управлять спавном (networked instantiation) сетевых объектов из Prefab'ов.

В большинстве игр есть Prefab, который представляет игрока, поэтому у сетевого менеджера есть слот для Prefab'а игрока. Вы должны назначить этот слот вашему Prefab'у. Когда у вас установлен Prefab player, игровой объект player автоматически создается из этого Prefab'а для каждого пользователя в игре. Это относится к локальному проигрывателю на размещенном сервере и удаленным проигрывателям на удаленных клиентах. Вы должны прикрепить компонент сетевой идентификации к Prefab'у игрока, прежде чем назначать его этому полю.

После того, как вы назначили prefab игрока, вы можете запустить игру в качестве хоста и увидеть появление игрового объекта игрока. Остановка игры уничтожает игровой объект игрока. Если вы создадите и запустите другую копию игры и подключите ее в качестве клиента к localhost, сетевой менеджер отобразит другой игровой объект player. Когда вы останавливаете этот клиент, он уничтожает игровой объект этого игрока.

В дополнение к prefab'у игрока, вы также должны зарегистрировать другие prefab'ы, которые вы хотите динамически создавать во время игры, с помощью Network Manager.

Вы можете добавить Prefab'ы в список, показанный в инспекторе, с пометкой "Registered Spawnable Prefabs". Вы также можете зарегистрировать prefab'ы с помощью кода с помощью метода ClientScene.RegisterPrefab.

Если у вас есть один Network Manager, он будет сохраняться между сценами с помощью Don't Destroy On Load (DDOL), вам нужно зарегистрировать в нем все Prefab'ы, которые могут быть созданы в любой сцене. Если у вас есть отдельный Network Manager в каждой сцене, вам нужно только зарегистрировать Prefab'ы, относящиеся к этой сцене.

Стартовые позиции

Network Manager по умолчанию создаст Player Prefab в заданном им положении и повороте, однако свойство Player Spawn Method позволяет вам управлять выбором начальных позиций в сочетании с компонентами Network Start Position.

  • Выберите Random, чтобы вызвать игроков в случайно выбранных вариантах начальной позиции.

  • Выберите Round Robin, чтобы начальные позиции задавались проходя по листу, в котором все начальные позиции.

Если режимы Random или Round Robin не подходят к вашей игре, вы можете кастомизировать данный процесс используя код. Вы также можете получить все доступные начальные позиции в листе NetworkManager.startPositions, а ещё вы можете использовать вспомогательный компонент GetStartPosition в Network Manager, который может быть использован при реализации OnServerAddPlayer для нахождения начальных позиций.

Управление сценами

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

В инспекторе сетевого менеджера есть два слота для сцен: оффлайн сцена и онлайн сцена. Перетаскивание ресурсов сцены в эти слоты активирует сетевое Scene Management.

При запуске сервера или хоста загружается онлайн сцена. Затем это становится текущей сетевой сценой. Всем клиентам, которые подключаются к этому серверу, дается указание также загрузить эту сцену. Название этой сцены хранится в поле networkSceneName.

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

Вы также можете менять сцены во время активной игры, вызвав метод ServerChangeScene. Это приводит к тому, что все подключенные в данный момент клиенты также меняют сцену и обновляют networkSceneName, так что новые клиенты также загружают новую сцену.

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

Обратите внимание, что смена сцены приводит к уничтожению всех игровых объектов в предыдущей сцене.

Обычно вы должны убедиться, что Network Manager сохраняется между сценами, в противном случае сетевое соединение прерывается при смене сцены. Чтобы сделать это, убедитесь, что в инспекторе установлен флажок Don’t Destroy On Load.

Кастомизация

Вы можете использовать виртуальные функции NetworkManager класса, который вы можете настроить, создав свой собственный производный класс, наследуемый от NetworkManager. При реализации этих функций обязательно позаботьтесь о функциональности, которую предоставляют реализации по умолчанию. К примеру, в OnServerAddPlayer, функцию NetworkServer.AddPlayer необходимо вызвать, чтобы активировать игровой объект игрока для подключения.

Чтобы сделать это проще, мы создали набор шаблонов скриптов в которых для вас объяснены все переопределения.

Last updated