使用 WebAssembly Streaming 的 Unity WebGL

dav*_*803 1 webassembly unity-webgl

我正在尝试使用 webassembly 流功能,但它不起作用。
我确实遵循了 WebAssembly 流的服务器配置的统一文档说明。 https://docs.unity3d.com/2019.3/Documentation/Manual/Webgl-Server-configuration-for-WebAssembly-streaming.html

我正在使用 Unity 2019.2.20f1

在 Unity 播放器设置中,我将压缩格式设置为 gzip 并启用 WebAssembly 流。

我将 .htaccess 文件添加到 Build 文件夹中。
以下是 .htaccess 文件的内容

<IfModule mod_mime.c>
  AddEncoding gzip .unityweb
  AddType application/wasm .wasm
  AddEncoding gzip .wasm
  AddOutputFilterByType DEFLATE application/wasm
</IfModule>
Run Code Online (Sandbox Code Playgroud)

我还补充说

application/wasm    wasm 
Run Code Online (Sandbox Code Playgroud)

到 /etc/mime.type

但我收到此错误。

wasm streaming compile failed: CompileError: WebAssembly.instantiateStreaming(): expected magic word 00 61 73 6d, found 1f 8b 08 18 @+0
Run Code Online (Sandbox Code Playgroud)

设置所需的修改后,我确实重新启动了服务。

我的 webgl 构建在没有 webassembly 流功能的情况下完美运行。
有没有人知道这个问题以及我做错了什么?

dav*_*803 5

对于那些有同样问题的人,我解决了这个问题。

首先您需要在 httpd.conf 文件中启用 AllowOverride 以使用 .htaccess 文件。
在我的情况下,它位于/ etc / httpd的/ conf目录
并使用打开httpd.conf文件vi httpd.conf命令
,找到的.htaccess使用/.htaccess命令

将会有<Directory "/var/www">并且<Directory "/var/www/html">
您将看到它们的 AllowOverrides 都设置为 None。
您需要将它们更改为全部。

只需点击即可进入i插入模式,更改AllowOverride NoneAllowOverride All
确保同时更改/var/www/var/www/html
完成后,点击ESC并键入:wq以保存修改并退出。

以下 .htaccess 文件不起作用。

<IfModule mod_mime.c>
  AddEncoding gzip .unityweb
  AddType application/wasm .wasm
  AddEncoding gzip .wasm
  AddOutputFilterByType DEFLATE application/wasm
</IfModule>
Run Code Online (Sandbox Code Playgroud)

更改 .htaccess 文件如下将完成这项工作。

Options +FollowSymLinks
RewriteEngine on
<Files "*.wasm">
    AddType application/wasm .wasm
    AddEncoding gzip wasm
</Files>
<Files "*.unityweb">
    AddEncoding gzip unityweb
</Files>
Run Code Online (Sandbox Code Playgroud)

如果您使用的是 brotli,请更改gzipbr
最后,您必须使用service httpd restart命令重新启动 httpd 服务。
繁荣!它现在有效。

关于加载速度,我的意思是,它肯定比非 WebAssembly Streaming 快。
但我的项目总共有 50mb 的数据大小,差异很小。
因此,如果您的项目需要加载大量数据,您应该尝试一下。
但如果它不是那么大,不要指望这里有什么戏剧性。