在发布模式下构建 WebGL 项目(请参阅发布构建)时,Unity 会压缩构建输出文件以减少构建的下载大小。可从 Publishing Settings(菜单:__Edit__ > Project Settings > Player > WebGL > Publishing Settings__)中的 Compression Format__ 选项中选择其使用的压缩类型:
__gzip__:这是默认选项。gzip 文件比 Brotli 文件更大,但构建速度更快,且所有浏览器都基于 http 和 https 实现此格式的本机支持。
__Brotli__:Brotli 压缩提供最佳压缩比。Brotli 压缩文件明显小于 gzip,但需要很长的压缩时间,因此增加了发布版本的迭代时间。Chrome 和 Firefox 原生支持基于 https 的 Brotli 压缩。如需了解更多信息,请参阅有关 WebGL 浏览器兼容性的文档。
__Disabled__:此选项禁用压缩。如果要在后期处理脚本中实现您自己的压缩,请使用此选项。
压缩构建的 Unity 构建可在任何浏览器上工作。Unity 包含一个用 JavaScript 编写的软件解压缩程序;当服务器未启用 http 传输级别的压缩时,可回退到此解压缩程序。
浏览器可在下载构建数据时在本机处理 Unity 构建的解压缩。这样做的好处是可避免因在 JavaScript 中解压缩文件而导致的额外延迟,从而缩短应用程序的启动时间。要让浏览器原生处理解压缩,必须配置 Web 服务器以使用适当的 http 标头提供压缩文件。这些标头告诉浏览器该数据是使用 gzip 还是 Brotli 压缩的,因此浏览器在传输数据时对数据进行解压缩。Firefox 和 Chrome 仅支持基于 https 的 Brotli 压缩,而所有其他浏览器支持 gzip 压缩。如需了解更多信息,请参阅有关 WebGL 浏览器兼容性的文档。
本机浏览器解压缩的设置过程取决于 Web 服务器。本页面上的说明适用于两种最常见的 Web 服务器:__Apache__ 和 IIS。注意:这些服务器应该适用于默认设置,但可能需要进行调整以符合具体配置。具体而言,如果已使用其他服务器端配置来压缩托管的文件(这可能会干扰此设置),可能会出现问题。 为了使浏览器在下载应用程序期间以原生和异步方式执行解压缩,您需要在服务器响应中附加一个 Content-Encoding 标头,该标头与 Unity 在构建时使用的压缩类型相对应。
Apache 服务器使用不可见的 .htaccess 文件实现服务器配置。下面的代码显示了可用于强制执行原生浏览器解压缩的 .htaccess 文件的示例。Apache 服务器配置设置是可选的。
对于 gzip 压缩的构建,请将以下 .htaccess 文件放入 Build 子文件夹:
<IfModule mod_mime.c>
AddEncoding gzip .unityweb
</IfModule>
对于 brotli 压缩的构建,请将以下 .htaccess 文件放入 Build 子文件夹:
<IfModule mod_mime.c>
AddEncoding br .unityweb
</IfModule>
必要的 IIS 服务器配置步骤:
默认情况下,IIS 服务器不提供未知 MIME(多用途互联网邮件扩展)类型的静态内容。为了使 Unity 构建能够在 IIS 上工作,必须将 .unityweb 扩展名与 application/octet-stream 内容类型相关联。有两种方法可以实现该目的:
使用 IIS Manager 界面: 在 IIS Manager 面板中选择您的网站,然后打开 MIME Types 设置。选择 Add…,将 file name extension 设置为 .unityweb,并将 MIME 类型设置为 application/octet-stream。单击 OK 保存所做的更改。
使用服务器配置文件: IIS 使用 web.config 文件实现服务器配置。这些配置文件反映了 IIS Manager 中针对特定文件夹所做的所有更改。为了将 application/octet-stream MIME 类型与 .unityweb 扩展名相关联,可使用以下 web.config 文件:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<staticContent>
<remove fileExtension=".unityweb" />
<mimeMap fileExtension=".unityweb" mimeType="application/octet-stream" />
</staticContent>
</system.webServer>
</configuration>
注意:配置文件会影响所有服务器子文件夹,因此只需在服务器根文件夹中设置 .unityweb 扩展名的 MIME 类型一次即可。
可选的 IIS 服务器配置步骤:
为了加快构建启动速度,可选择性使用以下配置文件。为了使用此设置,需要安装 Microsoft 的 IIS URL 重写 IIS 模块,否则,浏览器将抛出 500 内部服务器错误。
对于 gzip 压缩的构建,请将以下 web.config 文件放入 Build 子文件夹:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<staticContent>
<remove fileExtension=".unityweb" />
<mimeMap fileExtension=".unityweb" mimeType="application/octet-stream" />
</staticContent>
<rewrite>
<outboundRules>
<rule name="Append gzip Content-Encoding header">
<match serverVariable="RESPONSE_Content-Encoding" pattern=".*" />
<conditions>
<add input="{REQUEST_FILENAME}" pattern="\.unityweb$" />
</conditions>
<action type="Rewrite" value="gzip" />
</rule>
</outboundRules>
</rewrite>
</system.webServer>
</configuration>
对于 Brotli 压缩的构建,请将以下 web.config 文件放入 Build 子文件夹:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<staticContent>
<remove fileExtension=".unityweb" />
<mimeMap fileExtension=".unityweb" mimeType="application/octet-stream" />
</staticContent>
<rewrite>
<outboundRules>
<rule name="Append br Content-Encoding header">
<match serverVariable="RESPONSE_Content-Encoding" pattern=".*" />
<conditions>
<add input="{REQUEST_FILENAME}" pattern="\.unityweb$" />
</conditions>
<action type="Rewrite" value="br" />
</rule>
</outboundRules>
</rewrite>
</system.webServer>
</configuration>
注意:当已在服务器目录的层级视图中的较高级别覆盖内容类型时,<remove fileExtension=".unityweb" />
行可以处理这种情况,否则可能导致服务器异常。
WebAssembly 串流可以让浏览器在下载 WebAssembly 文件的同时解析和编译该文件,从而缩短了构建的启动时间。
可在 Publishing Settings 面板(菜单:__Edit__ > Project Settings > Player > WebGL > __Publishing Settings__)中选择 WebAssembly 串流。
为了使 WebAssembly 串流编译能够正常工作,服务器需要返回 application/wasm MIME 类型的 .wasm。
如果为 WebGL 构建启用了压缩功能,则在提供文件时需要添加正确的 Content-Encoding 响应标头。这是因为 WebAssembly 串流生成的 .wasm 文件将进行额外压缩。
如果使用 WebAssembly 串流,则必须相应地设置 Web 服务器。 如需进一步了解使用 WebAssembly 串流时的 Content-Encoding 细节,请参阅有关 WebAssembly 串流的服务器配置的文档。
2019–09–04 在 2019.2 中添加了 WebAssembly 串流
2017–05–24 页面已修订
5.6 版更新
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.