Вы можете использовать сетьсистему Unity, которая позволяет играть в многопользовательские игры через компьютерную сеть. Подробнее
См. в Словарь в WebGLAPI JavaScript, который отображает 2D- и 3D-графику в веб-браузере. Вариант сборки Unity WebGL позволяет Unity публиковать контент в виде программ JavaScript, использующих технологии HTML5 и API рендеринга WebGL для запуска контента Unity в веб-браузере. Подробнее
Посмотреть в Словарь двумя способами:
Мультиплеер Unity (ранее UNet)
Примечание. UNet – это устаревшее решение, а новый Решение для многопользовательской и сетевой игры (Netcode for GameObjects) находится в разработке.
При желании вы можете использовать WebSockets или WebRTC из JavaScript для реализации собственной сети. Обратите внимание, что вы не можете использовать сетевые классы .NET, поскольку код JavaScript не имеет прямого доступа к IP-сокетам для реализации сетевого подключения.
Эта страница содержит рекомендации по использованию сети в WebGL.
Использование класса UnityWebRequest в WebGL
Unity поддерживает класс UnityWebRequest в WebGL. Для реализации класса UnityWebRequest Unity использует JavaScript Fetch API, который использует браузер для обработки веб-запросов. Это накладывает ограничения безопасности на доступ к междоменным ресурсам.
Если вы отправляете веб-запрос на сервер, отличный от того, на котором размещен контент Unity, сервер, на который вы его отправляете, должен авторизовать контент Unity.
Для доступа к междоменным веб-ресурсам в WebGL сервер, к которому вы пытаетесь получить доступ, должен использовать обмен ресурсами между источниками (CORS) для авторизации междоменных веб-ресурсов.
Если вы пытаетесь получить доступ к содержимому с помощью UnityWebRequest, а на удаленном сервере не установлен или правильно настроен CORS, в консоли браузера появится сообщение об ошибке, подобное следующему:
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://myserver.com/. This can be fixed by moving the resource to the same domain or enabling CORS.
Серверу необходимо добавить заголовки Access-Control к отправляемым HTTP-ответам, чтобы указать, какие веб-страницы имеют разрешение на чтение этой информации из веб-браузера.
Для демонстрации того, как добавить заголовки контроля доступа, которые позволяют Unity WebGL получать доступ к ресурсам на веб-сервере из любого источника, см. следующий пример. В этом примере используются общие заголовки запросов и разрешены методы GET, POST или OPTIONS:
"Access-Control-Allow-Credentials": "true",
"Access-Control-Allow-Headers": "Accept, X-Access-Token, X-Application-Name, X-Request-Sent-Time",
"Access-Control-Allow-Methods": "GET, POST, OPTIONS",
"Access-Control-Allow-Origin": "*",
Загрузки UnityWebRequest
Не используйте код, который блокирует загрузку UnityWebReqest, например:
while(!www.isDone) {}
Вы не можете заблокировать поток, чтобы дождаться завершения загрузки UnityWebRequest, иначе ваше приложение зависнет. Поскольку WebGL является однопоточным, а API fetch
в JavaScript является асинхронным, загрузка может не завершиться, пока вы не вернете управление браузеру. Вместо этого используйте сопрограмму и оператор yield, чтобы дождаться завершения загрузки. Для получения дополнительной информации см. примеры сопрограмм с использованием UnityWebRequest.
Использование мультиплеера Unity
Мультиплеер Unity обеспечивает связь по протоколу WebSockets. См. раздел NetworkServer.useWebSockets.
Использование WebSockets или WebRTC из JavaScript
WebGL не обеспечивает прямого доступа к IP-сокетам, но вы можете использовать WebSockets или WebRTC (два наиболее распространенных сетевых протокола, поддерживаемых браузерами), чтобы обойти эту проблему. Хотя WebSockets широко поддерживаются, WebRTC допускает одноранговые соединения между браузерами и ненадежные соединения. В Unity нет встроенного API, позволяющего использовать WebSockets или WebRTC, но вы можете использовать плагин JavaScript для реализации этого. Вы можете найти подключаемые модули, реализующие работу в сети WebSocket, в Unity Asset Store.