Version: 2021.3
Input in WebGL
Building and distributing a WebGL project

WebGL 网络

您可以按照以下方式在 WebGL 中使用联网功能:

Optionally, you can use WebSockets or WebRTC from JavaScript to implement your own networking. Note that you can’t use .NET networking classes, because JavaScript code doesn’t have direct access to IP Sockets to implement network connectivity.

在 WebGL 中使用 UnityWebRequest 类

Unity 支持在 WebGL 中使用 UnityWebRequest 类。为实现 UnityWebRequest 类,Unity 使用 JavaScript Fetch API,它使用浏览器来处理 web 请求。这种情况下对访问跨域资源施加了安全限制。

如果您向非 Unity 内容托管服务器发送 Web 请求,则发送请求的服务器必须授权 Unity 内容。

为了在 WebGL 中访问跨域 Web 资源,您尝试访问的服务器需要使用跨源资源共享 (CORS) 对此跨域 Web 资源进行授权。

If you try to access content using UnityWebRequest, and the remote server doesn’t have CORS set up or configured correctly, an error like the following appears in the browser console:

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at can be fixed by moving the resource to the same domain or enabling CORS.

服务器需要向发出的 http 响应中添加一些 Access-Control 标头,以指示哪些网页有权从 Web 浏览器读取该信息。

以下示例演示了如何添加 Access-Control 标头,以允许 Unity WebGL 从任何源点访问 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 下载

Don’t use code that blocks a UnityWebRequest download, such as this:

while(!www.isDone) {}

You can’t block the thread to wait for a UnityWebRequest download to finish otherwise your application freezes. Because WebGL is single threaded, and the fetch API in JavaScript is asynchronous, your download might not finish unless you return control to the browser. Instead, use a Coroutine and a yield statement to wait for the download to finish. For more information, see Examples of coroutines using UnityWebRequest.

使用 Unity Multiplayer

Unity Multiplayer 通过 WebSockets 协议实现通信。请参阅 NetworkServer.useWebSockets

使用 JavaScript 中的 WebSockets 或 WebRTC

WebGL doesn’t allow direct access to IP Sockets, but you can use WebSockets or WebRTC (the two most common networking protocols supported by browsers) to get around this. While WebSockets are widely supported, WebRTC allows peer-to-peer connections between browsers and unreliable connections. Unity doesn’t have a built-in API that allows you to use WebSockets or WebRTC, but you can use a JavaScript plugin to implement this. You can find plugins that implement WebSocket networking on the Unity Asset Store.

Input in WebGL
Building and distributing a WebGL project