Это руководство написано с расчетом, что вы знакомы со строительными блоками, и содержит рекомендации по их настройке для использования с функциями многопользовательских игр на Meta Quest.
Краткий обзор многопользовательских блоков
В Core SDK версии 65 и более поздних в разделе Multiplayer Tag (Многопользовательский тег) представлены следующие строительные блоки:
Auto Matchmaking (Автоматический подбор игроков). Этот блок помогает создать прототип многопользовательской игры, автоматически объединяя всех подключенных игроков в одной комнате.
В интеграции Photon Fusion этот блок использует общий режим из Photon Fusion 2.
В интеграции Unity Netcode этот блок использует службу Unity Game Services Relay.
Custom Matchmaking (Пользовательский подбор игроков) (версия 71). Этот блок гарантирует большую гибкость подбора игроков, позволяя делать его на основании кода комнаты (и при необходимости пароля) как для Photon Fusion, так и для Unity Netcode. Вы можете интегрировать его со своим пользовательским интерфейсом и доставкой в рабочем приложении.
Friends Matchmaking (Подбор друзей) (версия 74). Этот блок интегрируется с API из Meta Platform SDK, чтобы пользователи могли приглашать в приложение друзей из Quest, которые будут автоматически присоединяться к одной сетевой комнате.
Local Matchmaking (Подбор игроков поблизости) (версия 74). Этот блок использует Colocation Discovery API для автоматического добавления игроков, которые физически находятся поблизости, в одну и ту же сетевую комнату.
Colocation (Совместное размещение). Этот блок помогает реализовать возможности "локального многопользовательского режима" смешанной реальности, создав общую точку ссылки с помощью Shared Spatial Anchor API, Colocation Discovery API (версия 74) или Space Sharing API (версия 77). Все сетевые игровые объекты, созданные в пространстве мира или сцены, будут видны в одном и том же месте всем расположенным там игрокам.
Networked Avatar (Сетевой аватар). Этот блок помогает выполнить интеграцию с аватарами Meta для вашего приложения. Он работает в смешанной и виртуальной реальности.
Примечание. Диспетчер ввода, используемый для аватаров, представляет собой реализацию на базе плагина Meta XR Plugin, который сейчас не поддерживает плагин OpenXR Plugin.
Networked Grabbable Object (Сетевой объект, который можно взять). Этот блок обеспечивает синхронизацию для сети объектов и позволяет игрокам брать объекты.
Player Name Tag (Тег имени игрока). Этот блок помогает создать прототип многопользовательского режима и представляет пример пользовательского интерфейса, в котором имя игрока в Quest отображается над его головой.
Player Voice Chat (Голосовой чат игроков). Этот используется только для сетевого решения Photon Fusion. Он интегрирует возможности VOIP с пакетом Photon Voice2, благодаря чему удаленно подключенные игроки могут общаться друг с другом в голосовом чате.
Shared Spatial Anchor Core (Основа общих пространственных привязок). Этот блок предоставляет основные функции для создания, загрузки, удаления и совместного использования общей пространственной привязки.
Пошаговая настройка проекта
Выбор сетевой платформы
Многопользовательские строительные блоки обеспечивают интеграцию с двумя популярными сетевыми платформами Unity: Unity Netcode for Game Objects и Photon Fusion.
Обе платформы имеют бесплатный уровень на этапе прототипирования. При переходе к этапу выпуска возможны различные расценки. Вы можете посетить сайт каждой платформы и решить, какая вам больше подходит:
Примечание. При интеграции многопользовательских строительных блоков обе платформы поддерживаются на паритетной основе, за исключением блока голосового чата Player Voice Chat, который доступен только для платформы Photon Fusion.
Вы можете выбрать платформу при установке любых многопользовательских блоков. Выбор в этом диалоговом окне необходимо сделать только один раз для каждой сцены с помощью многопользовательских строительных блоков.
Установка пакетов
Устанавливать пакеты удобно с помощью менеджера пакетов редактора Unity.
Большинство пакетов Unity или Meta, необходимых для работы с многопользовательскими строительными блоками, можно добавить из менеджера пакетов, выполнив следующие действия:
Нажмите на кнопку + и выберите Install package by name (Установить пакет по имени).
Введите имя пакета в поле Name (Имя) и нажмите Add (Добавить).
Установка Unity Netcode для пакетов Game Objects
Примечание. Прочтите этот раздел, только если вы собираетесь использовать платформу Unity Netcode.
Для платформы Unity Netcode требуются следующие базовые пакеты:
Unity Netcode for Game Objects — com.unity.netcode.gameobjects;
Unity Service Relay — com.unity.services.relay;
Unity Service Lobby — com.unity.services.lobby.
Последние два пакета требуются только для интеграции блока Auto Matchmaking (Автоматический подбор игроков), в котором для подключения игроков используется сервер Relay пакета Unity Game Services.
Вы всегда можете использовать собственный подбор игроков с помощью Unity Netcode и отказаться от игровых сервисов Unity, если не используете блок Auto Matchmaking. В других многопользовательских блоках также имеются возможности, которые позволяют отказаться от блока Auto Matchmaking.
Установка пакетов Photon
Примечание. Прочтите этот раздел, только если вы собираетесь использовать платформу Photon Fusion.
Установка пакетов Photon происходит несколько сложнее. Сначала перейдите в магазин Unity Asset Store и выберите "Add to My Assets" (Добавить в мои объекты) для пакетов Photon. Затем в редакторе Unity Editor выберите Package Manager (Диспетчер пакетов) > Packages: My Assets (Пакеты: мои объекты), чтобы установить пакеты.
Для этого пакета Photon Voice нам нужна только интеграция с Photon Fusion, поэтому исключите ненужные файлы в соответствии с официальным руководством.
Установка пакетов Meta SDK
Некоторые пакеты Meta SDK могут отсутствовать в вашем проекте, но при этом требоваться для определенных блоков. Чтобы установить их, выберите Package Manager (Менеджер пакетов) > Add package by name (Добавить пакет по имени):
Meta Interaction SDK: com.meta.xr.sdk.interaction.ovr
Этот пакет SDK необходим для блока Networked Grabbable Object и входит в состав Meta XR All-in-one SDK.
Meta Platform SDK — com.meta.xr.sdk.platform
Этот пакет SDK необходим для блока Colocation / Player Name Tag / Networked Avatar и входит в состав Meta XR All-in-one SDK.
Meta Avatar SDK — com.meta.xr.sdk.avatars
Необходим для блока Networked Avatar.
Примеры аватаров Meta Avatar SDK — com.meta.xr.sdk.avatars.sample.assets
В ряде случаев требуется блоку Networked Avatar для отображения примеров аватаров в качестве запасного варианта для игроков, не настроивших собственные аватары Meta.
Настройка проекта для блока Matchmaking
Оба сетевых фреймворка (Photon Fusion и Unity NGO) имеют собственные облачные сервисы для поддержки подбора игроков. Чтобы быстро настроить многопользовательскую среду прототипирования/тестирования с помощью блоков Matchmaking (Подбор игроков), выполните описанные ниже действия.
Unity Netcode для Game Objects: привязка проекта
Для использования блока Auto Matchmaking для Unity Netcode for Game Objects необходима привязка проекта к облаку Unity Cloud. Если при установке пакета Unity Service Relay вы не подключили свой проект к облаку Unity Cloud, автоматически откроется диалоговое окно Unity, которое перенаправит вас в Project Settings (Настройки проекта).
Если вы пропустили это окно, для настройки привязки перейдите в Edit (Редактировать) > Project Settings (Настройки проекта) > Services (Службы). Следуйте инструкциям и выполните действия в зависимости от состояния вашего проекта.
Photon Fusion: ID приложения
При установке пакета Photon Fusion откроется всплывающее окно с предложением ввести идентификатор приложения Fusion. Следуя инструкциям, войдите в аккаунт Photon или зарегистрируйте его и создайте приложение на панели Photon.
Если вы пропустили это всплывающее окно, его можно открыть повторно в Unity в меню Tools (Инструменты) > Fusion > Fusion Hub (Центр Fusion).
Выберите Hub (Центр) > Fusion 2 Setup (Настройка Fusion 2) > Photon App Settings (Настройки приложения Photon), чтобы перейти к объектам настроек приложения, где можно указать другие ID приложения. Этот пункт обычно расположен в меню Assets (Объекты) > Photon > Fusion > Resources (Ресурсы), если его открывать напрямую с вкладки проекта.
Если вы используете блок Player Voice Chat (Аудиочат игрока), вам необходимо выполнить аналогичную процедуру, создать приложение Photon Voice и указать ID приложения Voice в настройках приложения Photon.
Остальные параметры можно настроить по необходимости.
Настройка проекта для платформы Meta
Чтобы протестировать использование среды выполнения для Meta Avatar из блока Networked Avatar, имен Meta Player из блока Player Name Tag и блока Colocation, для проекта необходимо настроить параметр AppId для платформы Meta Horizon. Чтобы получить инструкции в редакторе Editor, можно использовать инструмент Meta Account Setup Guide (Руководство по настройке аккаунта Meta) в Unity: меню > Meta > Tools > Meta Account Setup Guide (Meta > Инструменты > Руководство по настройке аккаунта Meta).
Относительно проверки использования данных: если вы используете в своем проекте Meta Avatar, помимо UserID и UserProfile, следует запросить разрешение на использование аватара.
Настройка проекта для блока Colocation
Если вы хотите использовать блок Colocation для локальной многопользовательской игры, для запуска проекта в среде выполнения потребуются некоторые дополнительные настройки.
Настройка сеанса с совпадением местоположения
Сеанс с совпадением местоположения основан на использовании Colocation Discovery API, который сопоставляет локальных пользователей через Bluetooth/Wi-Fi и значительно упрощает процесс настройки поиска совпадений в соответствии с рекомендуемым подходом.
Для использования блока Colocation (Совпадения) с включенным параметром "Использовать сеанс совпадения местоположения" при тестировании приложения понадобится только учетная запись разработчика в проверенной команде. О проверке команды вы можете узнать в этом документе. Обратите внимание: в этом случае идентификатор приложения НЕ требуется.
Настройка без сеанса колокации
Если вы не используете подход с сеансом колокации, потребуется больше этапов настройки. Как уже упоминалось в руководстве по настройке аккаунта Meta, вам нужно будет пройти те же процессы настройки идентификатора приложения и проверки использования данных. Подробнее см. в разделе Общая пространственная привязка > Предварительные требования в документации. Там описаны дополнительные процессы, необходимые для тестирования колокации с учетом конфиденциальности доступа к пространственным данным, принадлежащим среде пользователя. Несколько важных дополнений из связанного документа:
Создание тестовых пользователей и тестирование в гарнитуре поможет обойти проверку использования данных, если анализ ещё не завершен.
Канал выпуска приложений должен быть настроен так, чтобы в него можно было добавлять пользователей, а APK-файл сборки необходимо загрузить в канал как минимум один раз, чтобы разблокировать тестирование общей пространственной привязки. После загрузки первого APK-файла вы сможете повторно использовать функцию Build and Run (Создать и запустить) из Unity. Важный показатель правильности выполненных действий — появление вашего приложения в списке App Library (Библиотека приложений) на гарнитуре, а не в списке Unknown Sources (Неизвестные источники). Если что-то идет не так, перезапуск гарнитуры может привести к обновлению статусов разрешений приложения.
При тестировании для гарнитуры должен быть включен параметр Enhanced Spatial Services (Улучшенные пространственные технологии).
Выбор подходящего варианта совместного размещения
Начиная с версии 77 мы предлагаем несколько вариантов решений колокации в рамках блоков колокации. Ниже вы найдете руководство по выбору подходящего варианта для вашего сценария использования. Полноценное решение колокации опирается на два ключевых аспекта: как подбирать игроков и как выполнять выравнивание.
Подбор игроков (параметр Use Colocation Session (Использование сеанса колокации)):
Параметр Use Colocation Session (Использование сеанса колокации) отключен. Подбор игроков осуществляется через сетевой фреймворк: для подбора игроков используйте сетевой фреймворк (например, Photon Fusion или NGO). Общие привязки синхронизируются с помощью фреймворка, так что требуется более сложная настройка приложения, чем в случае, описанном ниже. Параметр Install Matchmaking (Установить подбор игроков) позволяет выбрать конкретный способ подбора.
Параметр Use Colocation Session (Использование сеанса колокации) включен. Подбор игроков с использованием сеанса колокации: на основе Colocation Session/Colocation Discovery API, который использует Bluetooth и Wi-Fi для обнаружения находящихся рядом игроков и автоматического создания группы для них. Привязки и другая информация могут передаваться по локальной сети через Bluetooth или Wi-Fi. Это более простая настройка, чем та, которая описана выше.
Выравнивание (параметр Share Space To Guests (Предоставление общего доступа к пространству гостям)):
Параметр Share Space To Guests отключен — через одну общую пространственную привязку. Игроки выравниваются относительно одной общей привязки, созданной организатором. Подходит для простых сценариев.
Параметр Share Space To Guests включен — через предоставление общего доступа к пространству на базе Space Sharing API. Все приглашенные игроки используют конфигурацию пространства, полученную от организатора, а все привязки комнаты выровнены. Этот вариант больше подходит для сценариев, в которых гости должны взаимодействовать с окружающей средой. Если гость взаимодействует с окружением (например, разбрызгивает краску на стену), использование этой опции гарантирует, что все игроки увидят цветовой эффект в одном и том же месте, точно совмещенном с реальной стеной.
Самое интересное — объединение блоков для создания многопользовательских режимов
Все настройки сделаны, и наступает самое интересное!
Сценарий совместного присутствия: многопользовательская игра виртуальной или смешанной реальности, игроки присоединяются удаленно
Вы можете перетаскивать блоки Networked Avatars, Player Name Tag, Player Voice Chat, Networked Grabbable Object вместе с собственной средой виртуальной или смешанной реальности. Игроки из других мест могут присоединиться к вам в том же сеансе и играть вместе с вами. Ниже приведен пример такого объединения, а также показано, как можно реализовать готовую многопользовательскую игру с совместным присутствием в гарнитуре:
Сценарий колокации: многопользовательская игра смешанной реальности, игроки присоединяются локально в одном пространстве
Подобным образом вы можете не использовать блок Networked Avatar, а объединить блок Colocation с другими блоками в этой сцене. Игроки, находящиеся в одном физическом месте (в одной комнате), могут присоединиться к вам в режиме совместной игры. Ниже приведены реальные примеры колокации:
1. Совместная игра в шахматы в смешанной реальности
В этом примере мы применяем блоки Colocation, Touch Hand Grab (из ISDK, чтобы получить возможность касаться шахматные фигуры и брать их), Networked Grabbable Object, Anchor Prefab Spawner (из MRUK, чтобы поставить шахматы на стол) к подготовленному объекту "шахматная доска". Большинство неодиночных блоков взаимодействия, таких как Networked Grabbable Object, можно напрямую перетаскивать на существующий 3D-объект, а также внедрять в пакетном режиме с несколькими выбранными в сцене объектами. В этом примере мы применяем как блок Touch Hand Grab, так и блок Networked Grabbable Object (используем гравитацию) ко всем шахматным фигурам, чтобы обеспечить их взаимодействие и синхронизации по сети.
Вот как это выглядит, когда к сеансу присоединяются два игрока вместе:
2. Совместная игровая дуэль на мечах
Аналогичным образом подготовив объекты "световые мечи", вы можете устроить игровую дуэль двух пользователей с использованием блоков Colocation (Колокация), Networked Grabbable Object (Сетевой объект, который можно взять), Anchor Prefab Spawner (Источник prefab привязки) (из MRUK, чтобы сначала положить меч на стол) и Distance Grab (Взятие на расстоянии) (из ISDK, чтобы удаленно брать меч на расстоянии). Вот пример того, что можно сделать с помощью блоков:
Тестирование многопользовательского приложения
Советы и полезные ссылки, которые помогут вам протестировать многопользовательское приложение:
Рекомендуемые версии для использования блока Networked Avatar — Core SDK версии 76 или более поздних и Avatar SDK версии 35.2 или более поздних, в которых все перечисленные ниже проблемы уже устранены.
Если вам всё же необходимо использовать более ранние сочетания версий Core SDK и Avatar SDK, учитывайте следующие известные проблемы:
Все версии Core SDK поддерживают версии Avatar SDK 24.1 и более ранние.
При использовании Avatar SDK версии выше 24.1 с Core SDK версии 74 или более ранней блок Networked Avatar, скорее всего, будет некорректно обрабатывать ввод. В этом случае выполните следующий обходной шаг:
После установки блока Networked Avatar в сцене найдите GameObject [Строительный блок] Networked Avatar. Этот объект содержит дочерний GameObject AvatarSDK с компонентом EntityInputManager. Замените EntityInputManager компонентом SampleInputManager из пакета примеров объектов, а затем установите значение None для режима отслеживания движений тела. Начиная с Core SDK версии 76 это действие не требуется.
Компонент SampleInputManager из Avatar SDK, используемый блоком Networked Avatar, не поддерживает Unity OpenXR Plugin до версии Avatar SDK 35.2. Если вы используете Unity OpenXR Plugin, необходимо использовать Avatar SDK версии 35.2 или более поздней.
Известные проблемы с блоком Custom Matchmaking (Пользовательский подбор игроков) в Photon Fusion
Эта проблема устранена в Core SDK версии 76. Если вы по-прежнему используете более раннюю версию Core SDK, ниже перечислены известные проблемы и возможные способы их решения:
Начиная с версии 71 в реализации блока Custom Matchmaking (Пользовательский подбор игроков) в Photon Fusion возникла известная проблема, когда при работе с блоком Networked Grabbable Object (Сетевой объект, который можно взять) (по сути, с сетевыми объектами в текущей сцене) объект вообще не синхронизируется. Это вызвано тем, что текущая сцена не была встроена в параметры при запуске сетевого сеанса.
В версии 74 блок Colocation (Колокация) с включенным параметром Use Colocation Session (Использовать сеанс колокации) также зависит от блока Custom Matchmaking (Пользовательский подбор игроков), где возникает аналогичная проблема.
В качестве временного решения проблемы предлагаем изменения кода для скрипта CustomMatchmakingFusion в игровом объекте [Building Blocks] Custom Matchmaking ([Строительные блоки] Пользовательский подбор игроков):
// CustomMatchmakingFusion.cs
// Step1. define these functions somewhere in the class
private static NetworkSceneInfo GetSceneInfo()
{
SceneRef sceneRef = default;
if (TryGetActiveSceneRef(out var activeSceneRef))
{
sceneRef = activeSceneRef;
}
var sceneInfo = new NetworkSceneInfo();
if (sceneRef.IsValid) {
sceneInfo.AddSceneRef(sceneRef, LoadSceneMode.Additive);
}
return sceneInfo;
}
private static bool TryGetActiveSceneRef(out SceneRef sceneRef)
{
var activeScene = SceneManager.GetActiveScene();
if (activeScene.buildIndex < 0 || activeScene.buildIndex >= SceneManager.sceneCountInBuildSettings) {
sceneRef = default;
return false;
}
sceneRef = SceneRef.FromIndex(activeScene.buildIndex);
return true;
}
// Step2. within several public functions like `CreateRoom` `JoinRoom` `JoinOpenRoom` with `StartGame` call
var result = await runner.StartGame(new StartGameArgs
{
GameMode = gameMode,
Scene = GetSceneInfo(), // <- Add this line as apart of the StartGameArgs
CustomLobbyName = options.LobbyName,
SessionName = sessionName,
PlayerCount = options.MaxPlayersPerRoom,
IsVisible = !options.IsPrivate
});
Вопрос. В моем проекте возникают ошибки компиляции со скриптами строительных блоков Photon Fusion, когда я удаляю Photon из своего проекта.
Ответ. В настоящий момент пакеты Photon не относятся к пакетам диспетчера пакетов Unity (UPM). Мы могли только предположить их существование с помощью пользовательских скриптов или определяющих символов, используемых пакетами Photon, но эти символы не удаляются автоматически при удалении пакета. Если у вас возникают ошибки компиляции, обычно связанные с удалением пакетов Photon из проектов, найдите и удалите следующие define-символы скриптов для всех платформ в Edit (Редактирование) > Project Settings (Настройки проекта) > Player (Игрок) > Other Settings (Другие настройки) > Script Compilation (Компиляция скрипта) > Script Define Symbols (Define-символы скрипта):
FUSION_WEAVER
PHOTON_VOICE_DEFINED
PHOTON_FUSION_PHYSICS_ADDON_DEFINED
В. Блок Colocation не работает в моей гарнитуре
— У меня появились предупреждающие сообщения "Failure Unsupported" (Неподдерживаемые сбои) для общей пространственной привязки.
О. Убедитесь, что на гарнитуре, которую вы используете для тестирования, используется сборка как минимум версии 65.
— Мой объект в сцене расположен не на своем месте или смещен относительно того места, в котором он должен находиться в совместной игре.
О. Скорее всего, причина заключается в сбое блока Colocation. Просмотрите журналы на предмет предупреждений или ошибок и проверьте, отображается ли созданная по умолчанию привязка к серверу в одном и том же физическом положении для всех игроков (это наиболее очевидный признак того, работает ли блок Colocation).
— Я получаю ошибку "Failed entitlement check: 7 — user does not have app in library" (Проверка прав не выполнена: 7 — у пользователя нет приложения в библиотеке) в среде выполнения.
О. Это происходит из-за того, что сборка приложения не загружена в канал выпуска приложения. Следуйте инструкциям по настройке выше.
— Я получаю сообщение, что параметр Enhanced Spatial Services (Улучшенные пространственные технологии) не включен, хотя в настройках гарнитуры эта функция включена.
О. В некоторых случаях изменения вступают в силу только после перезапуска гарнитуры.
В. При попытке протестировать приложение с несколькими гарнитурами, подключенными с использованием одного и того же аккаунта, я получаю сообщение об ошибке: "Multiple Devices Can’t Access This App at the Same Time" (Несколько устройств не могут одновременно использовать это приложение).
О. Это связано с нашим современным механизмом обеспечения многопользовательского режима и общего доступа к приложениям. Для тестирования приложения на разных устройствах рекомендуется использовать разные аккаунты (например, аккаунт тестового пользователя). Пользователи могут иметь разные аккаунты на одной гарнитуре и делиться своими приложениями с другими пользователями с помощью общего доступа к приложениям.