Unity 6.3
0 онлайн 72 гостей 3 в системе
Вход
Разработка платформы Шаг 321 из 387

Веб-сеть

Сеть можно использовать в веб-приложениях следующими способами:

Используйте класс 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).