Unity WebGL:如何禁用Cookie或从URL更新游戏对象模型
这种缓存导致资源不更新的情况确实挺头疼的,尤其是在真机或者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
相关产品推荐
相关产品推荐

