Version: 2019.4
Gráficas WebGL
Utilizando Audio en WebGL

WebGL Networking (redes)

No hay acceso directo al socket

Debido a implicaciones de seguridad, el código JavaScript no tiene un acceso directo a IP Sockets para implementar una conectividad en red. Como resultado, las clases de networking .NET (ie, todo en el namespace System.Net, particularmente System.Net.Sockets) son no funcionales en WebGL. Lo mismo aplica a las clases viejas UnityEngine.Network* de Unity, las cuales no están disponibles cuando construya para WebGL.

Si usted necesita utilizar Networking (redes) en WebGL, usted actualmente tiene las opciones para utilizar las clases WWW o UnityWebRequest en Unity o las nuevas características del Unity Networking que soportan WebGL, o implementar su propio networking (redes) utilizando WebSockets o WebRTC en JavaScript.

Utilizando las clases WWW o WebRequest en WebGL

Las clases WWW y UnityWebRequest son soportadas en WebGL. Estas son implementadas utilizando la clase XMLHttpRequest en JavaScript, utilizando el navegador para manejar solicitudes WWW. Esto impone algunas restricciones de seguridad acerca de acceder a recursos a través de dominios. Básicamente cualquier solicitud WWW a un servidor que es diferente del servidor que aloja el contenido de WebGL necesita estar autorizado por el servidor que usted está intentado acceder. Para acceder a recursos WWW a través de dominios en WebGL, el servidor que usted está intentando acceder necesita autorizar el uso de CORS.

Si usted intenta acceder contenido utilizando WWW o UnityWebReqest, y el servidor remoto no tiene CORS configurado o configurado correctamente, usted verá un error como este en la consola del navegador:

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.

CORS significa Cross-Origin Resource Sharing, y está documentado aquí. Básicamente, el servidor necesita agregar algunos encabezados de Access-Control a las respuestas http que envíe, lo cual le dice a los navegadores que se permite que páginas web accedan el contenido en el servidor. Aquí hay un ejemplo de una configuración del encabezado, lo cual le permitiría a Unity WebGL en acceder recursos en un servidor web desde un origen, con encabezados de solicitudes comunes y utilizando los métodos http GET, POST o 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": "*",

Tenga en cuenta que WWW.responseHeaders está limitado a un sub-conjunto de los encabezados de respuesta actuales, de acuerdo a 7.1.1 de la especificación CORS.

También tenga en cuenta que XMLHttpRequest no permite el streaming de datos, por lo tanto la clase WWW en WebGL solamente va a procesar cualquier dato una vez la descarga haya finalizado (por lo que AssetBundles no pueden ser descomprimidos y cargados mientras se descarguen como en otras plataformas).

Do not block on WWW or WebRequest downloads

Do not use code which blocks on a WWW or WebRequest download, like this:

while(!www.isDone) {}

Blocking on WWW or WebRequest downloads does not work on Unity WebGL. Because WebGL is single threaded, and because the XMLHttpRequest class in JavaScript is asynchronous, your download never finishes unless you return control to the browser; instead, your content deadlocks. Instead, use a Coroutine and a yield statement to wait for the download to finish.

Utilizando Unity Networking

Unity Networking soporta WebGL al habilitar comunicación via el protocol WebSockets. Ver Networking.NetworkManager.useWebSockets.

Utilizando Web Sockets o WebRTC desde JavaScript

Como está escrito arriba, el acceso directo a IP Sockets no es posible en WebGL. Sin embargo, si usted necesita capacidades de networking más allá de la clase WWW, es posible utilizar Web Sockets o WebRTC, ambos protocols de networking soportados por navegadores. Los Web Sockets tiene un soporte más amplio, pero WebRTC permite conexiones p2p entre navegadores y conexiones poco fiables. Ninguno de estos protocolos son expuestos a través de APIs construidas en Unity todavía, pero es posible utilizar un JavaScript plugin para implementar esto. Un ejemplo de un plugin que implementa el WebSocket networking (redes) en Unity WebGL se puede encontrar en la AssetStore.

Gráficas WebGL
Utilizando Audio en WebGL