Веб-сеть
Сеть можно использовать в веб-приложениях следующими способами:
- Используйте UnityWebRequest class.
- Используйте сетевой пакет Unity Netcode.
Используйте класс UnityWebRequest в веб-сборках
Unity поддерживает UnityWebRequest класс в Web. Для реализации класса UnityWebRequest Unity использует JavaScript Fetch API, а обработку веб-запросов берёт на себя браузер. Отсюда следуют ограничения безопасности на доступ к ресурсам из других доменов.
Если вы отправляете веб-запрос на другой сервер, чем тот, на котором размещено содержимое Unity, сервер, на который вы отправляете запрос, должен авторизовать содержимое Unity.
Для доступа к междоменным веб-ресурсам в Интернете сервер, к которому пытаетесь получить доступ, должен использовать общий доступ к ресурсам между источниками (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 ответам, которые он отправляет, чтобы указать, какие веб-страницы имеют разрешение на чтение этой информации из веб-браузера.
Демонстрацию добавления заголовков Access-Control, которые позволяют Unity Web получать доступ к ресурсам веб-сервера из любого источника, см. в следующем примере. Этот пример включает общие заголовки запросов и разрешает методы 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 загрузки
Не используйте код, который блокирует загрузку UnityWebRequest, например:
while(!www.isDone) {}
Веб-браузеры не позволяют синхронно блокировать выполнение кода в ожидании передачи по сети. Поэтому, если вам нужно выполнить синхронный стиль UnityWebRequest, используйте Корутин и команду yield, чтобы дождаться завершения загрузки. Дополнительные сведения см. в Примеры сопутствующих процедур, использующих UnityWebRequest.
Используйте сетевой пакет Unity Netcode
Из-за ограничений безопасности, веб-браузеры не позволяют прямой доступ к сокетам TCP или UDP. Вместо этого, вы можете использовать сетевой пакет Unity Netcode, который поддерживает веб-платформу. Дополнительную информацию см. в документации About Netcode for GameObjects (Unity Multiplayer Networking).
Для получения дополнительных сведений о сетевых стандартах веб-браузеров, возможно, будет полезно изучить следующие документы:
- Протокол WebSocket (Дататрекер)
- WebRTC: Связь в реальном времени в браузерах (W3)
- WebTransport (W3).
Ограничения веб-сетей
Есть несколько сетевых функций, которые не поддерживаются веб-платформой.
Нет поддержки сетевых классов .NET
Вы не можете использовать никакие сетевые классы .NET в Web-платформе, потому что код JavaScript не имеет прямого доступа к сокетам интернет-протокола (IP) для реализации сетевого соединения. В частности, Web не поддерживает никакие классы .NET в пространстве имен System.Net.
Отсутствие поддержки доступа к собственным сокетам
Веб-платформа не поддерживает доступ к собственным сокетам из-за ограничений безопасности в браузерах. Поэтому веб-платформа также не поддерживает такие функции, как UnityEngine.Ping (ICMP).