Unity WebGL部署报错:IndexedDB加载Game.data.br失败(Array buffer分配错误)
解决Unity WebGL部署后大文件加载的IndexedDB ArrayBuffer错误
1. 直接禁用IndexedDB缓存
Unity WebGL默认会把Game.data这类大文件存进IndexedDB,但浏览器对单文件的内存分配有上限,550MB的文件很容易触发这个错误。直接跳过缓存加载:
- 找到构建后的
index.html,在Unity初始化的config里加一行:
放在config.disableIndexedDB = true;createUnityInstance调用前或者config定义的地方都可以,这样游戏会直接从服务器加载文件,不走IndexedDB缓存。
2. 修复Nginx的大文件传输配置
默认Nginx的配置可能没针对超大文件优化,改一下站点配置文件(比如/etc/nginx/sites-available/your-webgame.conf):
- 加上这些参数,确保大文件能分块传输,缓存头也正常:
server { # 保留你原来的配置,新增/修改下面的 client_max_body_size 1G; proxy_buffering off; sendfile on; tcp_nopush on; tcp_nodelay on; location ~* \.br$ { add_header Content-Encoding br; add_header Vary Accept-Encoding; expires 1y; add_header Cache-Control "public, immutable"; } } - 改完重启Nginx:
sudo systemctl restart nginx
3. 排查浏览器端内存问题
32位浏览器的内存上限很低,大概率装不下550MB的ArrayBuffer,换64位的Chrome/Firefox试试,同时关掉其他占内存的标签页,给游戏腾空间。
4. 拆分Unity的大资源文件
如果上面的方法都不行,就在Unity里把大文件拆了:
- 打开
Build Settings→Player Settings→WebGL→Optimization - 勾选
Split Application Binary,设置一个合理的拆分阈值(比如100MB),把Game.data拆成多个小文件,这样单个文件就不会触发内存分配限制了。
内容的提问来源于stack exchange,提问作者Muhammad Taqi
相关产品推荐
相关产品推荐

