Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Руководство API скрипты

Настройка многопользовательского проекта

Важно: UNet — это устаревшее решение, а также новая многопользовательская и сетьсистема Unity, которая обеспечивает многопользовательскую игру. игры через компьютерную сеть. Подробнее
См. в Словарь
Решение (Netcode для GameObjects) находится в разработке. Дополнительную информацию и дальнейшие действия см. на веб-сайте Unity Netcode for GameObjects.

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

  • Менеджер сети

  • пользовательский интерфейс (для того, чтобы игроки могли находить игры и присоединяться к ним)

  • Сетевые префабы игроков (для управления игроками)

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

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

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

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

  • Отношения между клиентом, сервером и хостом
  • Идея власти над игровыми объектами и действиями

Чтобы узнать об этих концепциях, см. документацию по концепциям сетевых систем.

Сетевой менеджер

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

Компонент диспетчера сети
Компонент диспетчера сети

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

Дополнительные сведения см. в документации по Диспетчеру сетиСетевой компонент, управляет сетевым состоянием проекта. Подробнее
См. в Словарь
.

Пользовательский интерфейс, позволяющий игрокам находить игры и присоединяться к ним

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

Типичное многопользовательское игровое лобби, позволяющее игрокам находить, создавать и присоединяться к играм, как показано в демонстрационной версии сети TANKS, доступной в Asset Store.
Типичное многопользовательское игровое лобби, позволяющее игрокам находить, создавать и присоединяться к играм, как показано в демонстрационной версии сети TANKS, доступной в Asset Store.

В Unity есть чрезвычайно простая встроенная версия такого интерфейса, которая называется NetworkManagerHUDСетевой компонент, создающий пользовательский интерфейс. меню, которое позволяет вам управлять сетевым состоянием вашей игры с помощью Network Manager. Подробнее
См. в Словарь
. Это может быть чрезвычайно полезно на ранних этапах создания игры, поскольку позволяет легко создавать матчи и тестировать игру без необходимости реализовывать собственный пользовательский интерфейс(Пользовательский интерфейс) Позволяет пользователю взаимодействовать с вашим приложением. Подробнее
См. в Словарь
. Однако он очень прост как по функциональности, так и по визуальному дизайну, поэтому вам следует заменить его собственным пользовательским интерфейсом, прежде чем вы закончите свой проект.

Встроенный HUD Network Manager в Unity, показанный в режиме MatchMaker.
Встроенный HUD Network Manager в Unity, показанный в режиме MatchMaker.

Чтобы узнать больше, см. документацию по интерфейсу Network Manager.

Игровые объекты сетевого игрока

В большинстве многопользовательских игр есть объект, которым игрок может управлять, например персонаж, машина или что-то еще. В некоторых многопользовательских играх отсутствует один видимый «объект игрокаобъект API высокого уровня (HPAPI), представляющий игрока на server и имеет возможность запускать команды (которые представляют собой безопасные удаленные вызовы процедур между клиентом и сервером) из клиента проигрывателя. Подробнее
См. в Словарь
», но вместо этого разрешить игроку управлять множество юнитов или предметов, как в шахматах или стратегических играх в реальном времени. В других даже нет конкретных объектов, например, в игре с рисованием на общем холсте. Однако во всех этих ситуациях вам обычно необходимо создать GameObject, который концептуально представляет игрока в вашей игре. Сделайте этот GameObject Prefabтипом актива, который позволяет хранить GameObject вместе с компонентами и свойствами. Префаб действует как шаблон, из которого вы можете создавать новые экземпляры объектов на сцене. Подробнее
Посмотрите в Словарь
и прикрепите к нему все скрипты, которые контролируют то, что делает плеер. можно сделать в вашей игре.

Если вы используете компонент Unity Network Manager (см. Network Manager выше), назначьте Prefab в поле Player Prefab.

Сетевой менеджер с префабом Player Car, назначенным на поле Player Prefab.
Сетевой менеджер с префабом Player Car, назначенным на поле Player Prefab

Когда игра запущена, Network Manager создает копию («экземпляр») вашего префаба игрока для каждого игрока, который подключается к матчу.

Однако — и это может сбить с толку людей, плохо знакомых с многопользовательским программированием, — вам необходимо убедиться, что скрипты в экземпляре Prefab вашего проигрывателя «осведомлены» о том, использует ли игрок, управляющий экземпляром, хост компьютер (компьютер, который управляет игрой) или клиентский компьютер (компьютер, отличный от того, который управляет игрой).

Это связано с тем, что обе ситуации будут происходить одновременно.

Скрипты для многопользовательской игры

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

Например, скрипты, которые вы размещаете в своем префабе проигрывателя, должны позволять «владельцу» этого экземпляра проигрывателя управлять им, но не должны позволять другим людям управлять им.

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

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

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

Для неигровых игровых объектов сервер обычно имеет полномочия на то, что происходит (например, был ли собран предмет), и все клиенты принимают то, что сервер сообщает им о том, что произошло с этим игровым объектом.

Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
Руководство Unity 2021.3