Version: 5.5
Высокоуровневые понятия сетевого взаимодействия
Network Views

Элементы сетевого взаимодействия в Unity

(For new projects, you should use the new networking system introduced in 5.1. This information is for legacy projects using the old networking system.)

Встроенные в Юнити способы работы с сетями поддерживают всё, описанное на предыдущей странице. Создание серверов и подключение клиентов, обмен данными между подключенными клиентами, определение какой игрок управляет какими объектами, доступ через различные конфигурации сети - всё это поддерживается сразу после установки Юнити. На этой странице мы рассмотрим реализацию в Юнити этих сетевых задач.

Создание сервера

Перед тем как вы сможете начать играть в сетевую игру, вам необходимо определить другие компьютеры, с которым вы будете обмениваться данными. Чтобы это сделать, необходимо создать сервер. Это может быть как машина, на которой запущена игра, так и отдельная выделенная машина, не принимающая участия в игре. Чтобы создать сервер, просто вызовите Network.InitializeServer() в скрипте. Если вы хотите подсоединться к уже существующему серверу как клиент, вызывайте Network.Connect().

В общем, вам может быть очень полезно ознакомиться со всем классом Network class.

Связь с использованием компонентов Network View

Network View (просмотр сети) это компонент, который отправляет данные через сеть. Компонент Network View даёт вашим объектам GameObject возможность отправлять данные, используя удаленный вызов процедур RPC или синхронизацию состояний State Synchronization. Способ, которым вы используете Network View будет определять, как будут работать сетевые взаимодействия вашей игры. Network View имеют несколько вариантов, но все они необычайно важны для ваших сетевых игр.

Для большей информации об использовании Network View изучите Network View Guide page и Component Reference page.

Удаленные вызовы процедур (Remote Procedure CAlls, RPC)

Remote Procedure Calls (RPCs) are functions declared in scripts that are attached to a GameObject that contains a Network View. The Network View must point to the script which contains the RPC function. The RPC function can then be called from any script within that GameObject.

Для большей информации об использовании RPC в Юнити, изучите RPC Details page.

Синхронизация состояний (State Synchronization)

Синхронизация состояний это постоянный обмен данными между всеми клиентами игры. Таким способом позиция игрока может быть синхронизирована со всем клиентами, так что будет казаться, что он управляется локально, когда данные в действительности доставляются через сеть. Для синхронизации состояний внутри объекта GameObject вам просто надо добавить компонент NetworkView на этот объет и объяснить ему, за чем наблюдать. Наблюдаемые данные после этого синхронизируются со всеми клиентами в игре.

Для большей информации об использовании синхронизации состояний в Юнити, изучите State Synchronization page.

Network.Instantiate()

Network.Instantiate() позволяет вам создавать экземпляры префабов на всех клиентах естественно и просто. По сути, это вызов функции Instantiate(), но он выполняет создание экземпляров на всех клиентах.

Внутренне Network.Instantiate это простой вызов RPC, который выполняется на всех клиентах (также локально). Он распределяет NetworkViewID и назначает его созданной копии префаба, что гарантирует его правильную синхронизацию среди всех клиентов.

Для большей информации изучите страницу Network Instantiate.

NetworkLevelLoad()

Работа с обменом данными, состоянием клиентов игроков и загрузкой уровней может быть слишком большой. На странице Network Level Load вы найдёте полезный пример для решения этой задачи.

Master Server

Master Server (Управляющий сервер) помогает вам подбирать игры. При запуске сервера, вы подключаетесь к master server, и он предоставляет вам список всех активных серверов.

Master Server это место встречи для серверов и клиентов, где афишируются серверы и совместимые клиенты подключаются к запущенным играм. Это снимает необходимость заботиться об IP адресах для всех сторон. Это даже может помочь пользователям хостить игры без необходимости возиться с их маршрутизаторами, что требовалось бы при обычных обстоятельствах. Это может помочь клиентам пройти через брандмауэр сервера и добраться до частных IP адресов, обычно недоступных из публичного интернета. Это делается с помощью facilitator, который способствует установлению соединения.

Для большей информации изучите Master Server page.

Минимизация сетевого трафика

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

Для получения советов по уменьшению сетевого трафика, изучите Minimizing Bandwith page.

Отладка сетевых игр

Юнити поставляется с несколькими вспомогательными инструментами, которые помогут вам отладить вашу сетевую игру.

  1. Network Manager (Менеджер сетей) может быть использован для документирования всего входящего и исходящего сетевого трафика.
  2. Используя окна инспектора и иерархии вы можете отслеживать создание объектов, проверять сетевые идентификаторы и т.д.
  3. You can launch Unity two times on the same machine, and open different projects in each. On Windows, this can be done by just launching another Unity instance and opening the project from the project wizard. On Mac OS X, multiple Unity instances can be opened from the terminal, and a -projectPath argument can be specified: /Applications/Unity/Unity.app/Contents/MacOS/Unity -projectPath “/Users/MyUser/MyProjectFolder/” /Applications/Unity/Unity.app/Contents/MacOS/Unity -projectPath “/Users/MyUser/MyOtherProjectFolder/”

Убедитесь, что проигрыватель работает в фоновом режиме во время отладки сети потому что, если, например, два экземпляра запущены одновременно, один из них не будет активным. Это разорвет цикл сетевого взаимодействия и может вызвать непредсказуемые последствия. Вы можете включить этот параметр в Edit->Project Settings->Player в редакторе или при помощи Application.runInBackground

Высокоуровневые понятия сетевого взаимодействия
Network Views