Строительный блок многопользовательских сеансов
Реализуйте в проекте многопользовательские сеансы Unity с помощью готовых элементов UI этого Unity Building Block. Узнайте, что такое сеансы, как их настраивать и отлаживать, а также как подключаться к пакетам Netcode от Unity.
Введение
Multiplayer Session Building Block помогает вам интегрировать многопользовательские сессии Unity в ваш проект, чтобы соединить игроков. Этот Building Block может служить отправной точкой для ваших многопользовательских проектов, или как быстрая интеграция сессий в процессе разработки.
В этом блоке создания показано, как выполнить следующие действия:
- Создание сеанса и присоединение к нему через многопользовательские службы SDK.
- Используйте Быстрое Присоединение API, чтобы быстро получить игроков в любой существующей сессии.
- Используйте Просмотр Сеанса API для перечисления существующих сеансов и присоединения к конкретному.
- Используйте JoinCode для совместного использования и присоединения к конкретному сеансу.
Модуль Multiplayer Sessions Building Block включает примерные сцены, UIToolkit UI ассетов и компонентов времени выполнения для создания, просмотра и присоединения к сеансам и отладки их с помощью SessionInfo панели. Если вам нужна синхронизация игры, вы можете добавить Netcode, используя Unity Netcode for GameObjects или Netcode for Entities.
Предварительные условия
- Установите Unity Строительный блок — многопользовательский сеанс от Unity Asset Store:.
- Связать ваш проект Unity Editor с облачным проектом.
Первоначальная настройка
Вы можете проверить правильность установки Building Block, открыв одну из включенных в примерных сцен.
- Откройте одну из многопользовательских сцен, перейдя в Активы > Блоки > MultiplayerSession > Сцены.
- Выберите Играть, чтобы войти в режим воспроизведения.
Теперь вы можете взаимодействовать с элементами UI в сцене для создания новой сессии.
Многопользовательские сеансы
Многопользовательский сеанс представляет группу подключённых игроков и предоставляет уровень абстракции для управления состояниями многопользовательской игры, включая первоначальное подключение игроков, выбор хоста, присоединение и выход игроков, а также установление сетевого соединения. Многопользовательские сеансы не выполняют синхронизацию игрового процесса, но совместимы с Netcode for GameObjects или Network for Entities; эти решения могут реплицировать авторитетное состояние игры после подключения игроков. Например, типичная последовательность подключения может выглядеть следующим образом:
- Инициализация служб Unity
- Аутентификация игрока
- Создание сеанса или присоединение к нему
- Подключитесь к нужному серверу или узлу сети
- Загрузить игровую сцену
Включенные ресурсы
Модуль создания многопользовательского сеанса содержит следующие сцены:
| Scene | Описание |
|---|---|
| JoinByBrowsing | Позвольте игрокам просматривать доступные сессии, чтобы присоединиться к ним или создать новый сеанс. Идеально подходит для поиска лобби с определенными настройками или игроками. |
| JoinByCode | Позвольте игрокам создать сессию и поделиться простым кодом присоединения, который другие игроки могут использовать для присоединения к сессии. Идеально подходит для присоединения и приглашения игроков на конкретную сессию путем копирования кода. |
| QuickJoin | Позвольте игрокам присоединиться к первой доступной сессии. Идеально подходит для быстрого присоединения к любой существующей сессии, когда соответствие определенным правилам не имеет значения. |
| QuickJoinDebug | Похоже на QuickJoin, но с дополнительным окном SessionInfo с информацией о сессии. Полезно для отладки сессии. |
JoinByBrowsing
SessionBrowser UXML:
CreateSessionElement: Укажите имя сессии и создайте сессию.SessionBrowserElement: Отображает доступные сеансы. Нажмите, чтобы выбрать сеанс.RefreshListButton: Обновляет список сеансов изSessionBrowserElement.JoinButton: Присоединение к выбранному сеансу из списка.
CurrentSession UXML:
SessionNameLabel: Отображает имя наблюдаемого сеанса.PlayerCountLabel: Отображает количество игроков в наблюдаемой сессии.PlayerNameLabel: Отображает имя игрока.CopySessionCodeElement: Отображает код присоединения для сессии, чтобы его можно было скопировать.PlayerListView: Отображает список игроков, которые присоединились к сессии.LeaveSessionButton: Выберите, чтобы покинуть присоединенный сеанс.
JoinByCode
JoinSessionByCode UXML:
CreateSessionElement: Укажите имя сессии и создайте сессию.CopySessionCodeElement: Отображает код присоединения для сессии, чтобы его можно было скопировать.JoinSessionByCode: Введите код сессии для присоединения к сессии.
CurrentSession UXML:
SessionNameLabel: Отображает имя наблюдаемого сеанса.PlayerCountLabel: Отображает количество игроков в наблюдаемой сессии.PlayerNameLabel: Отображает имя игрока.CopySessionCodeElement: Отображает код присоединения для сессии, чтобы его можно было скопировать.PlayerListView: Отображает список игроков, которые присоединились к сессии.LeaveSessionButton: Выберите, чтобы покинуть присоединенный сеанс.
QuickJoin
JoinSessionByQuickJoin UXML:
QuickJoinButton: Присоединиться к сессии с помощью Быстрое присоединение API.
CurrentSession UXML:
SessionNameLabel: Отображает имя наблюдаемого сеанса.PlayerCountLabel: Отображает количество игроков в наблюдаемой сессии.PlayerNameLabel: Отображает имя игрока.CopySessionCodeElement: Отображает код присоединения для сессии, чтобы его можно было скопировать.PlayerListView: Отображает список игроков, которые присоединились к сессии.LeaveSessionButton: Выберите, чтобы покинуть присоединенный сеанс.
QuickJoinDebug
JoinSessionByQuickJoin UXML:
QuickJoinButton: Присоединиться к сессии с помощью Быстрое присоединение API.
SessionInfo UXML:
SessionInfo: Отображает информацию об отладке для активного сеанса, аналогично в Просмотрщике Сеансов.
CurrentSession UXML:
SessionNameLabel: Отображает имя наблюдаемого сеанса.PlayerCountLabel: Отображает количество игроков в наблюдаемой сессии.PlayerNameLabel: Отображает имя игрока.CopySessionCodeElement: Отображает код присоединения для сессии, чтобы его можно было скопировать.PlayerListView: Отображает список игроков, которые присоединились к сессии.LeaveSessionButton: Выберите, чтобы покинуть присоединенный сеанс.
Присоединение к нескольким клиентам локально
Используйте Multiplayer Play Mode для тестирования настройки с несколькими игроками непосредственно из Unity Editor.
Добавление сетевого кода к сеансу
Чтобы интегрировать либо Netcode for GameObjects, либо Netcode for Entities в ваши сессии, выполните следующие действия:
- Установите пакет Netcode по вашему выбору, используя Package Manager (Окно > Управление пакетами > Package Manager).
- Установите либо Unity Netcode for GameObjects или Netcode for Entities.
- Включить Создать сетевой сеанс в
SessionSettings.- В вашем
SessionSettingsScriptableObject найдите и включите опцию Создать сетевой сеанс, которая позволяет распознавать ваши сессии и управлять ими выбранным решением Netcode.
- В вашем
- Изменить Тип сети в
SessionSettings.- Корректировка Тип сети внутри вашего
SessionSettingsчтобы соответствовать предполагаемой архитектуре сети. Можно выбрать из следующих вариантов:- Ретрансляция: для облачных служб ретрансляции.
- Распределённые полномочия: для работы с распределёнными полномочиями Netcode for GameObjects.
- Прямое: Для прямых соединений, использующих IP Адрес и Порт.
- Корректировка Тип сети внутри вашего
Чтобы больше узнать о различных NetworkTypes, см. Управление сетевыми подключениями.
Устранение неполадок
Многопользовательские услуги недоступны
- Многопользовательские Сервисы должны быть инициализованы. Вы можете инициализировать свои собственные сцены с настройками по умолчанию, добавив компоненты ServicesInitialization и PlayerAuthentication.
Сбой аутентификации
- Убедитесь, что вы вошли в редактор, и Project ID правильно.
- Проверьте включение служб, например проверки подлинности и лобби.
Не удается перечислить или присоединиться к сеансам
- Проверка подключения к сети и правил брандмауэра.
- Проверьте статус и квоты службы Лобби.
Код присоединения неверный или истек срок действия
- Убедитесь, что затронутый сеанс активен и не перегружен.
- Регенерируйте код присоединения, повторно создав сеанс.
- Убедитесь, что ретрансляция включена и регионы доступны.
- Перед запуском сетевой программы проверьте, установлены ли конечные точки.
UI не показывает данные
- Проверьте, что каждый
VisualElementв вашем UXML имеет свойSessionTypeустановлен правильно.
Дополнительные ресурсы
- Unity Услуги: Мультиплеер SDK
- Unity Netcode for GameObjects
- Unity Netcode for Entities