Skip to content
写作:2026-05-15更新:2026-05-16字数:—阅读:—维护:Azek431

创游世界数据持久化与存档设计指南

一句话摘要

本文档介绍创游世界中数据持久化的核心机制:玩家变量、云变量和存档系统的设计原则,帮助你构建可靠的存档和进度保存系统。

适合谁阅读

  • 需要设计存档系统的开发者
  • 想了解玩家变量和云变量区别的创作者
  • 需要实现进度保存的进阶用户

你将学到什么

  • 玩家变量和云变量的区别
  • 存档数据结构设计
  • 进度保存的最佳时机
  • 常见存档系统设计模式
  • 数据迁移和兼容处理

为什么需要数据持久化

没有数据持久化意味着:

  • 玩家关闭游戏后进度全部丢失
  • 无法实现关卡解锁
  • 无法保存玩家收集的道具
  • 无法记录玩家等级和属性

好的存档系统 = 游戏长期可玩性的基础。


核心概念:玩家变量 vs 云变量

玩家变量

定义: 记录玩家个人状态的持久化数据。

特点说明
存储位置本地或云端(取决于设置)
生命周期跨会话持久
同步范围单个玩家
用途玩家进度、道具、金币等个人数据

典型用途:

  • 玩家等级
  • 金币数量
  • 背包道具
  • 已通关关卡
  • 角色属性

云变量

定义: 存储在云端、可跨设备同步的变量。

特点说明
存储位置云端服务器
生命周期永久(除非手动清除)
同步范围多人可共享
用途排行榜、公共数据、联机同步

典型用途:

  • 服务器排行榜
  • 多人联机的公共数据
  • 跨设备同步的玩家数据
  • 公共活动数据

两者对比

对比项玩家变量云变量
主要用途个人数据公共数据
同步范围单玩家多玩家
联机依赖可离线使用必须联网
写入速度受网络影响
数据安全本地可被修改服务器验证

存档数据结构设计

基础存档结构

存档数据
├─ player_info(玩家基本信息)
│  ├─ player_id(唯一标识)
│  ├─ player_name(名称)
│  ├─ level(等级)
│  └─ create_time(创建时间)
├─ progress(游戏进度)
│  ├─ current_map(当前所在地图)
│  ├─ unlocked_maps(已解锁地图列表)
│  ├─ completed_quests(已完成任务)
│  └─ main_progress(主线进度)
├─ items(道具背包)
│  ├─ gold(金币)
│  ├─ gems(钻石)
│  ├─ inventory(背包道具列表)
│  │  ├─ item_id(道具ID)
│  │  ├─ count(数量)
│  │  └─ equipped(是否装备)
│  └─ equipment(已装备道具)
├─ stats(角色属性)
│  ├─ health(生命)
│  ├─ attack(攻击)
│  ├─ defense(防御)
│  └─ speed(速度)
└─ settings(游戏设置)
   ├─ music_volume(音乐音量)
   └─ sfx_volume(音效音量)

使用配置表管理道具数据

推荐做法: 道具的配置信息(名称、图标、属性加成)放在配置表中,存档只存道具ID和数量。

配置表:道具配置
├─ 道具ID:1001
│  ├─ 名称:生命药水
│  ├─ 类型:消耗品
│  ├─ 效果:恢复50生命
│  └─ 图标:potion_health.png

存档数据:背包
├─ 道具ID:1001
└─ 数量:5

这样设计的好处:
1. 道具配置修改不需要改存档
2. 道具可以动态增减
3. 存档数据量更小

存档时机设计

何时保存存档

时机说明推荐程度
关键节点后完成关卡、获得重要道具后⭐⭐⭐⭐⭐
定时保存每隔固定时间自动保存⭐⭐⭐⭐
离开游戏前检测到退出时保存⭐⭐⭐⭐
重要交互前购买、使用道具前⭐⭐⭐
每次变化任何数据变化都保存⭐⭐(谨慎使用)

避免频繁保存的原因

  • 写入速度影响游戏流畅度
  • 可能导致数据损坏
  • 增加服务器压力(云存档)

推荐做法:

  1. 日常小变化先缓存到临时变量
  2. 关键节点统一保存
  3. 退出游戏时强制保存

存档保存脚本示例

基础保存流程

当需要保存时(关键节点/退出/定时)
→ 获取所有需要保存的数据
→ 写入玩家变量
→ (可选)发送到云端同步
→ 显示保存成功提示(如需要)

分步保存示例

保存进度脚本:
当收到广播 "保存_玩家进度" 时
→ 新建局部变量 存档数据
→ 设置 存档数据.当前地图 = 当前地图ID
→ 设置 存档数据.金币 = 系统属性.金币
→ 设置 存档数据.等级 = 系统属性.等级
→ 玩家变量.进度 = 存档数据
→ 发送广播 "保存_完成"

加载存档流程

加载存档脚本:
当玩家开始游戏时
→ 检查 玩家变量.进度 是否存在
→ 如果 存在:
    → 从 玩家变量.进度 读取数据
    → 恢复系统属性.金币 = 存档数据.金币
    → 恢复系统属性.等级 = 存档数据.等级
    → 切换地图 存档数据.当前地图
→ 否则:
    → 初始化新游戏数据
    → 切换地图 到新手教程地图

存档版本管理

为什么需要版本管理

游戏更新后可能出现:

  • 新增道具类型
  • 修改数据结构
  • 删除或合并字段

如果不做版本管理,旧存档可能导致:

  • 数据错乱
  • 游戏崩溃
  • 功能异常

版本管理策略

存档数据结构
├─ version(存档版本号)
├─ data(存档数据)
└─ timestamp(保存时间)

加载时处理:
当加载存档时
→ 检查存档版本号
→ 如果 版本号 < 当前版本:
    → 执行迁移函数
    → 逐版本升级数据结构
→ 验证数据完整性
→ 加载数据

迁移函数示例

迁移函数 v1_to_v2:
→ 新增字段:玩家变量.进度.v2_新增字段
→ 设置默认值
→ 返回迁移后的数据

迁移函数 v2_to_v3:
→ 重命名字段
→ 转换数据格式
→ 返回迁移后的数据

云存档设计

云存档的优势

优势说明
跨设备同步换手机也能继续游戏
防数据丢失本地损坏可从云端恢复
多设备体验手机、平板同步进度

云存档注意事项

1. 网络检查
   → 保存前检查网络状态
   → 无网络时使用本地存档

2. 冲突处理
   → 多设备同时保存可能冲突
   → 方案A:使用时间戳,以最新为准
   → 方案B:提示玩家选择保留哪个

3. 安全验证
   → 云存档应包含签名/校验
   → 防止玩家篡改存档作弊

异步保存处理

发送云存档时:
→ 显示"保存中..."
→ 异步发送到云端
→ 等待返回结果
→ 如果成功:显示"保存成功"
→ 如果失败:提示"保存失败,是否重试?"
→ 失败时保留本地备份

常见问题与解决方案

Q:存档数据丢失怎么办?

预防措施:

  1. 定期自动保存
  2. 保留最近几次存档备份
  3. 提供云存档恢复选项

恢复流程:

当检测到存档损坏
→ 提示玩家
→ 提供选项:
   - 重新开始
   - 尝试恢复备份
   - 从云端恢复(如果有)

Q:如何防止玩家作弊修改存档?

方案:

  1. 重要数据存云端
  2. 使用加密和校验
  3. 服务器端验证数据合理性
  4. 定期检测异常数据

本地存档防作弊(有限效果):

1. 存档数据加密存储
2. 包含数据校验和
3. 关键数值范围检查
4. 异常数据上报分析

Q:存档占用空间太大怎么办?

优化方案:

  1. 使用道具配置表,存档只存ID和数量
  2. 删除不必要的冗余数据
  3. 压缩存档数据
  4. 定期清理过期数据

存档系统设计检查表

在设计存档系统时,确保以下要点:

  • [ ] 明确哪些数据需要持久化
  • [ ] 区分玩家变量和云变量的使用场景
  • [ ] 设计清晰的存档数据结构
  • [ ] 确定存档保存时机
  • [ ] 实现存档版本管理
  • [ ] 处理存档加载的边界情况
  • [ ] 考虑存档损坏的恢复方案
  • [ ] 测试不同网络状态下的表现

相关页面


待验证问题

  • [待验证] 创游世界玩家变量的存储容量限制
  • [待验证] 云变量写入的频率限制
  • [待验证] 存档加密的具体实现方式

后续优化方向

  • [ ] 补充更多存档结构模板
  • [ ] 添加存档系统设计图示
  • [ ] 完善云存档的技术细节

参与维护

发现文档问题?

你可以编辑页面、提交反馈,或复制链接给维护者,帮助这个资料库继续变好。

由 Azek431 整理与维护 | 基于 MIT 许可证开源