The Mirror游戏存档系统:本地存储与云端备份方案

The Mirror游戏存档系统:本地存储与云端备份方案

【免费下载链接】the-mirror 【免费下载链接】the-mirror 项目地址: https://gitcode.com/GitHub_Trending/th/the-mirror

你是否曾在创作游戏关卡时因意外丢失进度而沮丧?是否担心精心设计的场景因设备故障无法恢复?The Mirror(镜像)游戏引擎提供的存档系统通过本地实时存储与云端版本控制的双重保障,让创作过程更加安心。本文将详解这一系统的实现原理与操作方法,帮助你高效管理创作成果。

存档系统核心架构

The Mirror的存档解决方案采用"本地自动保存+云端版本管理"的混合架构,既确保创作过程的即时安全,又支持跨设备访问和历史版本回溯。系统主要由三个功能模块构成:

实时本地存储机制

引擎在编辑模式下会自动记录所有场景变更,通过操作日志(Operation Log)实现增量保存。核心代码位于mirror-godot-app/creator/undo_history.gd,采用命令模式(Command Pattern)设计,每次编辑操作都会生成可序列化的命令对象:

# 伪代码示例:操作日志记录
func record_operation(operation: EditorOperation):
    undo_stack.append(operation)
    if auto_save_enabled:
        save_undo_stack_to_disk()

这种设计不仅支持撤销/重做功能,还能在意外退出时通过日志重建工作状态。本地存储路径遵循系统规范:

  • Windows: %APPDATA%/Mirror/undo_snapshots/
  • macOS: ~/Library/Application Support/Mirror/undo_snapshots/
  • Linux: ~/.local/share/Mirror/undo_snapshots/

手动版本创建流程

当需要创建里程碑版本时,开发者可通过界面触发显式保存。工具栏中的"保存版本"按钮会打开版本命名窗口,相关UI逻辑在mirror-godot-app/creator/creator_ui.gd中实现:

func _on_build_toolbar_save_version_button_pressed():
    _save_version_window.populate(Zone.space)
    _save_version_window.show()

版本创建窗口要求输入版本名称,核心处理逻辑位于mirror-godot-app/ui/save_version/save_version_window.gd

func _on_save_button_pressed():
    var version_name = _space_version_name.text
    var promise: Promise = Net.space_client.create_space_version(space_id, version_name)
    await promise.wait_till_fulfilled()
    if promise.is_error():
        Notify.error("保存失败", promise.get_error_message())
    else:
        Notify.success("保存成功", "%s 已保存" % version_name)

成功创建的版本会显示在版本历史列表中,包含名称、时间戳和创建者信息。

云端备份与恢复服务

版本数据通过REST API同步至云端,服务端实现位于mirror-web-server/src/space-version/space-version.service.ts。系统采用差异备份策略,仅传输与上一版本的差异数据,显著节省带宽。

操作指南:从保存到恢复

创建版本快照

  1. 在编辑模式下完成场景编辑后,点击顶部工具栏中的"版本"按钮(位于发布按钮左侧)

    版本按钮位置

  2. 在弹出的版本命名窗口中输入描述性名称(建议包含关键变更信息,如"添加物理碰撞系统")

    版本命名窗口

  3. 点击"保存"按钮,系统会显示进度指示器,完成后提示成功

版本恢复流程

  1. 点击工具栏"版本"按钮下拉菜单中的"恢复版本"选项

  2. 在版本历史列表中选择目标版本,点击"预览"可查看该版本快照

    版本恢复界面

  3. 确认后点击"恢复",系统会重启编辑器并加载选定版本

权限控制:只有空间管理员(ROLE.MANAGER及以上)可以执行恢复操作,权限检查在mirror-godot-app/creator/tools/build_bar/build_bar.gd中实现:

func _can_save_restore_space() -> bool:
    var role = Util.get_role_for_user(Zone.space, Net.user_id)
    return role >= Enums.ROLE.MANAGER

最佳实践与注意事项

版本命名规范

采用清晰的版本命名有助于快速识别历史状态,建议遵循以下格式:

  • 功能型:"添加玩家重生系统_v1"
  • 阶段型:"Alpha_0.3.2"
  • 日期型:"20231020_碰撞优化"

避免使用模糊名称如"测试1"、"最新版"等。

备份频率建议

  • 小型修改:每2-3小时创建版本
  • 功能完成:每个独立功能开发完成后必须创建版本
  • 发布前:发布前创建"Release Candidate"版本
  • 重大变更前:实施可能影响多个系统的修改前创建备份

存储空间管理

本地快照默认保留最近30个,旧快照会自动清理。云端存储空间限制取决于账户类型:

  • 免费账户:每个空间50个版本
  • 专业账户:无限制版本存储,单个版本最大1GB

可通过开发者控制台查看存储空间使用情况。

高级功能:自动化与集成

CI/CD集成

专业团队可通过API实现自动化版本管理,例如在合并到主分支时自动创建版本:

# 使用curl调用版本创建API
curl -X POST https://api.themirror.com/v1/spaces/{spaceId}/versions \
  -H "Authorization: Bearer {token}" \
  -d '{"name":"CI自动创建版本","description":"由GitHub Actions触发"}'

完整API文档参见mirror-docs/docs/rest-api/space-versions.md。

协作场景最佳实践

在多人协作时,建议采用以下工作流:

  1. 每日开始工作前更新到最新版本
  2. 实施重大变更前通知团队成员
  3. 创建"工作中"版本(名称以"WIP:"开头)用于临时保存
  4. 功能完成后通过Pull Request合并,自动创建正式版本

这种工作流可最大限度减少版本冲突,相关协作功能在mirror-docs/docs/teams.md中有详细说明。

故障排除与常见问题

本地保存失败

若出现本地保存失败,可按以下步骤排查:

  1. 检查磁盘空间:确保至少有1GB可用空间
  2. 权限修复:尝试以管理员身份运行编辑器
  3. 日志诊断:查看~/.mirror/logs/editor.log中的错误信息

云端同步错误

网络问题可能导致同步失败,系统会自动重试3次,仍失败则:

  1. 检查网络连接,确保能访问api.themirror.com
  2. 验证账户状态:在设置中确认订阅未过期
  3. 手动触发同步:在版本历史窗口点击"同步"按钮

版本冲突解决

当多人修改同一资源时可能产生冲突,系统会:

  1. 自动合并可兼容变更
  2. 对冲突部分标记为"需要解决"状态
  3. 提供可视化对比工具辅助解决冲突

冲突解决工具使用指南参见mirror-docs/docs/tutorials/conflict-resolution.mdx。

总结与资源

The Mirror的存档系统通过分层设计提供了可靠的创作保障,从实时本地快照到云端版本管理,形成完整的数据安全网。合理使用这些功能可显著降低开发风险,提高团队协作效率。

相关资源

建议定期查看更新日志,了解存档系统的最新改进。如有功能建议,可通过GitHub Issues提交,项目源码参见mirror-godot-app/mirror-web-server/

通过这套存档系统,你可以放心地专注于创作,无需担心辛苦工作的成果意外丢失——The Mirror会为你的创意保驾护航。

【免费下载链接】the-mirror 【免费下载链接】the-mirror 项目地址: https://gitcode.com/GitHub_Trending/th/the-mirror

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值