您可以在 Web 中使用以下方式使用 网络Unity 系统,支持跨计算机网络的多人游戏。 更多信息
参见 术语表
Unity 支持 Web 中的 UnityWebRequest 类。为了实现 UnityWebRequest 类,Unity 使用 JavaScript Fetch API,该 API 使用浏览器处理 Web 请求。这会对访问跨域资源施加安全限制。
如果您向除托管 Unity 内容的服务器之外的服务器发送 Web 请求,则您发送请求的服务器必须授权 Unity 内容。
要在 Web 中访问跨域 Web 资源,您尝试访问的服务器需要使用 跨域资源共享 (CORS) 来授权跨域 Web 资源。
如果您尝试使用 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.
服务器需要在它发送的 HTTP 响应中添加 Access-Control 标头,以指示哪些网页有权从 Web 浏览器读取该信息。
以下示例演示了如何添加 Access-Control 标头以允许 Unity Web 从任何来源访问 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 下载的代码,例如以下代码
while(!www.isDone) {}
Web 浏览器不允许同步阻塞代码执行来等待网络传输。因此,如果您需要执行同步类型的 UnityWebRequest,请使用 协程 和 yield 语句来等待下载完成。有关更多信息,请参见 使用 UnityWebRequest 的协程示例。
由于安全限制,Web 浏览器不允许直接访问 TCP 或 UDP 套接字。相反,您可以使用 Unity Netcode 网络包,该包支持 Web 平台。有关更多信息,请参见文档 关于 Netcode for GameObjects(Unity 多人游戏网络)。
有关 Web 浏览器网络标准的更多信息,您可能需要探索以下内容
Web 平台不支持一些网络功能。
您不能在 Web 平台内使用任何 .NET 网络类,因为 JavaScript 代码无法直接访问互联网协议 (IP) 套接字来实现网络连接。具体来说,Web 不支持 System.Net
命名空间内的任何 .NET 类。
Web 平台不支持本机套接字访问,因为浏览器存在安全限制。因此,Web 也不支持 UnityEngine.Ping(ICMP)等功能。