关于UnityWebgl缓存机制

最近在做UnityWebgl热更的时候,我的热更程序集更新,而我所有运行过项目的设备都没有更新成功。而没运行过的设备则运行的是最新的程序集。那么说明必然是和缓存有关系了。

特意查了一下问题,发现Edge浏览器会把一些比较小的图片、脚本等资源进行缓存,以便下次再次运行的时候能够更加快速流畅。我这里使用的是HybirdCLR做代码热更,发现这个热更程序集会被浏览器缓存,所以热更后浏览器依然读的是缓存的旧程序集。

查了很多资料,有些人说需要JS原生开发去处理缓存,做好版本控制。我这里发现了另外一种方式,在Unity内也可以直接做到。

1、下面是我的测试案例:

代码:

cs 复制代码
      string testpersistentDataPathPath = Application.persistentDataPath + "1.txt";
        Debug.Log(Application.persistentDataPath);

        Debug.Log("persistent是否存在:" + File.Exists(testpersistentDataPathPath));

        if (File.Exists(testpersistentDataPathPath))
        {
            Debug.Log($"存在Persistent,他的内容是{File.ReadAllText(testpersistentDataPathPath)}");
        }
        else
        {
            Debug.Log($"写入 {testpersistentDataPathPath}");
            File.WriteAllText(testpersistentDataPathPath, "哈哈哈");
        }

1、查找webgl的持久化路径(Application.persistentDataPath) ,它是存在的,打印出来的是**/idbfs/7e2ca8b4761dc653a9fdda6daab68d82。**

2、使用IO 去写入一个txt文件(内容为哈哈哈),也写入成功了。

3、第二次进入,直接就可以读了,那么说明确实是缓存成功了。

似乎被缓存到了Cookie中,我删除记录后就需要重新写入了。

那么既然我已经可以直接用File读到缓存的文件了,那么说明我也可以去判断程序集是否更新,通过MD5也行、版本控制都可以。

2、以下来自ChatGPT4.0的解释

在Unity WebGL中,Application.persistentDataPath实际上是一个虚拟文件系统(Virtual File System, VFS),它在运行时通过浏览器的IndexedDB存储数据。这种方式让你感觉像是在写入文件系统,但实际上是利用浏览器的存储机制来持久化数据。因此,你可以成功写入文件,但这些文件是存在于浏览器的IndexedDB中,而不是本地文件系统中。

3、temporaryCachePath,我顺便测了下这个路径,这个路径用得比较少。实测在webgl中无法写入

4、以下来自Unity官网的解释

相关推荐
敲代码的嘎仔6 分钟前
从零搭建微服务:Spring Cloud Alibaba 全家桶踩坑实录(Nacos + OpenFeign + Gateway + Sentinel)
java·spring boot·spring·spring cloud·微服务·gateway·sentinel
一条泥憨鱼1 小时前
苍穹外卖【day7| 对购物车进行操作】
java·后端·mysql·苍穹外卖
都叫我大帅哥12 小时前
Java JJWT 完全指南:从入门到生产级实践
java
前端开发张小七14 小时前
Java 学习笔记 · 第一课:基础语法与核心概念
java·后端
ai_coder_ai14 小时前
分布式缓存架构设计与实践
分布式·缓存
ThsPool14 小时前
【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发
java·前端·javascript
赤壁小虾15 小时前
【渲染流水线】[逐片元阶段]-[透明度测试]以UnityURP为例
java·前端·数据库
青山木16 小时前
Hot 100 --- 搜索插入位置
java·数据结构·算法·leetcode
Jul1en_16 小时前
【Claude Code Compact】源码级别的学习上下文压缩
java·前端·学习·github·ai编程
摇滚侠16 小时前
《SpringBoot 3:入门与应用实战》第 15 章 生产级特性 管理 Spring Boot 应用 阅读笔记
java·spring boot·笔记