You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity WebGL:如何禁用Cookie或从URL更新游戏对象模型

解决UnityWebRequest加载XML时的Cookie缓存问题

这种缓存导致资源不更新的情况确实挺头疼的,尤其是在真机或者WebGL环境下(毕竟播放模式没有本地存储),给你几个实用的解决思路:

1. 直接控制Cookie的缓存

UnityWebRequest提供了Cookie相关的控制方法,你可以针对性清除缓存或者干脆禁用Cookie:

清除指定URL的Cookie缓存

在每次发起请求前,调用UnityWebRequest.ClearCookieCache(uri)清除目标URI关联的Cookie,确保拿到最新内容:

string xmlUri = "你的XML文件URL";
// 先清除对应URI的Cookie缓存
UnityWebRequest.ClearCookieCache(xmlUri);
// 再发起请求
UnityWebRequest request = UnityWebRequest.Get(xmlUri);
yield return request.SendWebRequest();

// 后续XML解析和模型更新逻辑...

完全禁用Cookie

如果你的场景不需要用到Cookie,可以直接在请求里禁用Cookie的发送与接收:

UnityWebRequest request = UnityWebRequest.Get(xmlUri);
// 清空Cookie请求头并禁用自动Cookie处理
request.SetRequestHeader("Cookie", "");
request.useHttpContinue = false;
yield return request.SendWebRequest();

2. 添加缓存破坏参数(最通用的方案)

给URL追加一个随机参数(比如时间戳、随机数),让服务器认为是全新请求,直接绕过缓存逻辑:

string xmlUri = "你的XML文件URL";
// 追加时间戳参数,确保每次请求的URL唯一
string updatedUri = $"{xmlUri}?t={System.DateTime.UtcNow.Ticks}";
UnityWebRequest request = UnityWebRequest.Get(updatedUri);
yield return request.SendWebRequest();

这种方法不需要处理Cookie,兼容性拉满,大部分服务器会自动忽略这个额外参数,返回最新的XML内容。

3. 通过请求头强制跳过缓存

设置HTTP请求头,明确告诉服务器不要返回缓存的文件:

UnityWebRequest request = UnityWebRequest.Get(xmlUri);
// 添加缓存控制头,强制获取最新资源
request.SetRequestHeader("Cache-Control", "no-cache, no-store, must-revalidate");
request.SetRequestHeader("Pragma", "no-cache");
request.SetRequestHeader("Expires", "0");
yield return request.SendWebRequest();

这个方法依托HTTP协议的缓存规则生效,适合不能修改URL的场景。

4. 设置UnityWebRequest的缓存策略

直接将请求的缓存策略设为忽略本地缓存:

UnityWebRequest request = UnityWebRequest.Get(xmlUri);
request.cachePolicy = CachePolicy.IgnoreCache;
yield return request.SendWebRequest();

注意这个属性在不同平台的表现可能略有差异,建议结合前面的方法一起使用,确保稳定性。


内容的提问来源于stack exchange,提问作者shss

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:47:57