您可以按照以下方式在 Web 中使用联网功能:
Unity 支持在 Web 中使用 UnityWebRequest 类。为实现 UnityWebRequest 类,Unity 使用 JavaScript Fetch 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 套接字。相反,您可以使用支持 Web 平台的 Unity Netcode 联网包。有关更多信息,请参阅关于 Netcode for GameObjects(Unity 多人游戏联网)文档。
有关 Web 浏览器联网标准的更多信息,您可能希望探索以下内容:
有一些联网功能是 Web 平台不支持的。
无法在 Web 平台中使用任何 .NET 联网类,因为 JavaScript 代码无法直接访问互联网协议 (IP) 套接字来实现网络连接。具体而言,Web 不支持 System.Net 命名空间中的任何 .NET 类。
由于浏览器内的安全限制,Web 平台不支持原生套接字访问。因此,Web 也不支持 UnityEngine.Ping (ICMP) 等功能。