最近我们的项目数据在持续的爬坡,通过调整开发新功能来进行迭代,拉升产品数据,来获得更多的流量。
-
对惹,这里有一个游戏开发交流小组,希望大家可以点击进来一起交流一下开发经验呀

产品每天代表数据

广告金奖励
今天给大家分享一个解决方案:
Unity+YooAssets关于新版本功能更新后,新用户使用的是"新代码+新资源",而老用户使用的却是"新代码+老资源",老用户使用的还是本地缓存的老资源,导致程序报错,无法正常启动。
我今天更新新功能“收藏室+翻倍抽奖”功能的时候就发现这个问题,我代码是新的,但是资源读取的还是本地缓存的"老资源"。
通过打印调试发现,读取的是本地的资源缓存的资源文件。
解决老用户"新代码+旧资源"问题
技术原理:微信小游戏提供了API,来让开发者根据资源路径删除单个本地缓存的资源文件,也可以全部删除所有缓存资源文件。
/// <summary>
/// 游戏异常时,使用本接口清理资源缓存/// </summary>public static void CleanAllFileCache(Action<bool> action = null){WXSDKManagerHandler.Instance.CleanAllFileCache(action);}/// <summary>/// 当空间不足时,清理指定大小缓存,按文件最近访问时间排序/// </summary>/// <param name="fileSize">需要清理的文件大小,单位bytes</param>public static void CleanFileCache(int fileSize, Action<ReleaseResult> action = null){WXSDKManagerHandler.Instance.CleanFileCache(fileSize, action);}/// <summary>/// 删除指定文件/// </summary>/// <param name="path">需要清理的文件路径,支持完整路径,也支持StreamingAssets/filepath格式</param>public static void RemoveFile(string path, Action<bool> action = null){WXSDKManagerHandler.Instance.RemoveFile(path, action);}
对于大项目,资源多的项目,删除那些变动的资源文件,对于小项目,可以全部删除所有的资源文件。
大项目方案:
资源包带一个版本号+资源列表文件(资源名+MD5校验)
服务器上带一个最新的版本号+资源列表文件(资源名+MD5校验)
老用户的"新代码+旧资源"加载的时候,会读取到旧资源的版本号,与服务器固定地址的最新版本号(干脆直接带到代码里的资源版本号,这样就不用部署服务器了)进行比对,如果不一样,就比较"最新的"与"老的"资源列表文件,删除掉md5不一致的资源文件,再进入游戏,这样老用户就能使用到 "新代码+新资源"。
小项目方案:
对于一些项目,资源整体都很小,所以就可以考虑全部更新,不用做MD5比对,这样能更简单的做好这个管理。减少代码编码难度。
if (operation.Status == EOperationStatus.Succeed) {
Debug.Log($"远端第一次获得版本为: {operation.PackageVersion}");if (!operation.PackageVersion.Equals("2026-03-02-982")) {Debug.Log("ClearWeChatFileCache");SDKAdsPlugin.ClearWeChatFileCache();yield return new WaitForSecondsRealtime(0.5f);package = YooAssets.GetPackage("DefaultPackage");operation = package.UpdatePackageVersionAsync();yield return operation;}this.PackageVersion = operation.PackageVersion;Debug.Log($"远端最新版本为: {operation.PackageVersion}");}
这也是我的做法,我读取到的版本与代码带的版本进行比对,如果不同,直接调用: CleanAllFileCache,再正常的跑代码流程,这样就使用了远程的新资源下载到本地,下一次就是用本地的资源了。
END
今天的分享就到这里了,随后我们会出近期买量的数据分析与经验总结的文章,欢迎关注。
247

被折叠的 条评论
为什么被折叠?



