跳到主要内容

存档与联网:保存进度,守住信任边界

“保存游戏”至少有三种含义:同一设备下次继续、换设备继续、以及服务端认可玩家拥有什么。三者不能用同一个本地 JSON 文件解决。

先按数据性质选择位置​

数据可以怎样保存风险
音量与显示设置本地偏好清理缓存后可能丢失
单机棋盘与关卡进度带版本的本地存档损坏、旧格式、设备更换
跨设备进度账号关联的云存档冲突、离线修改和覆盖策略
付费货币、可信排行服务端权威记录不能信任客户端直接上报结果

PlayerPrefs 适合少量简单偏好,不是加密数据库。Unity 的文件路径与文件 API 在微信中有适配差异,使用前核对工具链;不要把桌面路径和写盘方式直接搬进去。

保存能恢复的业务状态​

{
"schemaVersion": 1,
"revision": 12,
"score": 120,
"cells": [1, 0, 2, 1],
"savedAt": "2026-10-31T10:00:00Z"
}

这是格式示意,四格只是为了简洁。不要序列化 Transform、动画进度或场景对象引用作为唯一存档。保存格子、等级和规则进度,恢复时重新创建视图。

加载前检查结构版本、格子数量、等级范围和数值上限。损坏时给出恢复策略,而不是无限抛异常。升级格式时编写迁移;客户端时间只用于辅助显示,不能作为可信奖励依据。

何时保存​

每次状态提交后可以标记“需要保存”,再合并短时间内的写入。关键进度根据可靠性要求及时保存,同时监听平台隐藏等生命周期作为补充。

不要只依赖退出回调。系统杀进程、崩溃或平台关闭不保证你有最后一次写入机会。原子写入或双份恢复策略也要根据目标存储 API 的真实保证来设计。

网络请求只是链条的一部分​

UnityWebRequest 是 Unity 通用 HTTP 入口之一。微信转换后还要检查域名白名单、HTTPS 证书、平台网络适配和请求限制;浏览器 CORS 与微信合法域名不是同一个问题。

凭据交换、身份验证和敏感密钥属于后端。不要把服务端密钥、第三方 Secret 或管理 Token 放进小游戏包。

重试、超时与冲突​

读请求通常可以有限重试;发奖励、购买等写请求要先有幂等标识。超时不代表服务端没有执行,盲目重发会重复结算。

云存档还需要选择冲突策略:按修订号拒绝旧写入、让玩家选择进度,或用可合并事件。仅比较客户端时间可能把正确数据覆盖掉。

给 AI 的任务中写明请求状态、超时提示、重复点击、取消、后台恢复和旧结果处理。验收断网、慢网、损坏存档、旧版本迁移和重复响应。

参考:UnityWebRequest、PlayerPrefs。