个人游戏技术选型案例:跨平台存档路径为什么不能随手放在游戏目录

一个个人游戏在跨平台存档路径、配置文件、权限、Steam Cloud 和便携版之间做技术选型的案例,详细讨论 Windows、macOS、Linux 和玩家迁移。

写在前面:存档能写进去,不代表放对了地方

个人游戏早期最常见的存档做法,是把文件放在游戏目录旁边。

比如:

  • save.json
  • config.ini
  • saves/profile_1.dat

开发时很方便。
文件就在项目旁边,打开就能看。

但商业发布后,这个方案会暴露很多问题:

  • 玩家没有写入权限
  • Steam 安装目录被清理
  • macOS App 包内不能随便写
  • Linux 发行版路径不同
  • 多用户共享同一台机器时冲突
  • Steam Cloud 配置不好做
  • 卸载和重装行为不符合玩家预期

魏临做过一款小型策略 RPG。
玩家带着一支三人巡逻队在边境小镇接任务、换装备、培养关系。

项目原型把存档写在游戏目录。
Windows 开发机上一直没问题。

直到测试玩家反馈:

“我装在 Program Files,游戏无法保存。”
“macOS 版每次重开都丢设置。”
“我想把存档从 Windows 拷到 Steam Deck,不知道文件在哪。”

魏临这才把存档路径当成正式技术选型处理。

一、先区分存档、配置和缓存

他先把文件分成三类。

第一类是存档。
玩家进度、角色、任务、装备、世界状态。
这类文件最重要,应该可备份、可迁移、可云同步。

第二类是配置。
分辨率、音量、语言、输入设置、画质档位。
这些通常跟设备相关,不一定应该跟着存档跨设备同步。

第三类是缓存。
缩略图、临时下载、编译后的着色器缓存、日志。
这些可以重建,不应该进入云同步。

早期所有文件混在一起。
现在三类文件路径和生命周期不同。

这个分类决定后续所有路径选择。

二、为什么不写游戏安装目录

游戏安装目录看起来直观,但不可靠。

在 Windows 上,如果游戏装在 Program Files,普通用户可能没有写权限。
在 macOS 上,应用包内部不应该写玩家数据。
在 Steam Deck 或 Linux 上,安装目录也可能由平台管理。

此外,玩家卸载游戏时,安装目录可能被删除。
如果存档在里面,就有丢失风险。

魏临决定:

正式版永远不把玩家数据写入安装目录。

安装目录只放只读游戏内容。
玩家数据放系统推荐的用户数据目录。

三、各平台路径怎么选

魏临使用引擎提供的 persistent data path 作为基础,但没有完全盲信。

他实际检查了各平台路径:

  • Windows:%USERPROFILE%/AppData/LocalLow/Studio/Game
  • macOS:~/Library/Application Support/Studio/Game
  • Linux:遵循 XDG,优先 ~/.local/share/Studio/Game
  • Steam Deck:实际落在 Linux 用户目录下

然后在游戏里提供“打开存档目录”按钮。

这个按钮很实用。

玩家要备份、迁移、发 bug 存档时,不需要去论坛找路径。

个人游戏越小,越应该减少玩家排查成本。

四、配置是否跟随云同步

魏临一开始想把所有文件都放进 Steam Cloud。

后来发现配置不一定应该同步。

例如:

  • 桌面 PC 用 2560x1440
  • Steam Deck 用 1280x800
  • 一台机器用键鼠
  • 另一台机器用手柄

如果配置随云同步,玩家每换设备都要重新调。

最终方案是:

  • 存档进入 Steam Cloud
  • 输入配置可选同步
  • 分辨率、图形、音频设备不进云
  • 日志和缓存不进云

语言设置是否同步,他做了一个折中:
默认同步,因为它更像玩家偏好;但如果启动参数指定语言,则覆盖云配置。

五、存档文件结构

他设计了目录结构:

GameData/
  saves/
    profile_1/
      save.json
      meta.json
      backups/
  config/
    user_settings.json
    input_bindings.json
  logs/
    game.log
  cache/
    thumbnails/

meta.json 保存存档摘要:

  • 显示名
  • 游戏版本
  • 游玩时间
  • 最后保存时间
  • 当前章节
  • 截图路径

主菜单读取 meta.json,不用打开完整存档。

这让存档列表加载更快,也降低损坏影响。

六、原子写入和备份仍然需要

路径选对不代表安全。

魏临仍然使用原子写入:

  • 写到临时文件
  • 校验成功
  • 替换正式文件
  • 保留上一份备份

如果保存过程中断电,至少还有旧文件。

他还限制备份数量,例如每个档位保留最近 5 个自动备份。

备份不进入主存档列表,但玩家可以通过“恢复备份”入口使用。

这对 RPG 特别重要。
玩家投入几十小时后,存档损坏是很难接受的。

七、跨平台兼容要避免路径写进存档

魏临发现一个隐藏问题。

早期存档里保存了截图绝对路径:

C:\Users\...\saves\profile_1\screen.png

这在跨平台后会失效。

他改成保存相对路径:

screenshots/latest.png

所有资源路径、截图路径、外部引用都尽量相对存档目录。

存档里也不保存平台相关分隔符,而是保存逻辑路径。

跨平台存档最怕把某个平台的文件系统细节写进去。

八、便携版需求怎么处理

有玩家希望便携版,把存档放游戏目录,方便 U 盘带走。

魏临没有默认这么做。
但提供启动参数:

--portable

启用后,游戏会在安装目录旁边创建 PortableData
同时主菜单明确显示“便携模式”。

这个模式不适合普通 Steam 版,但适合 itch 或免安装版本。

技术选型不是完全否定某个方案。
而是让它只在合适场景启用。

九、迁移和诊断

魏临还做了两个小功能:

  • 导出存档包
  • 导入存档包

导出时把存档、meta 和必要截图打包。
不包含日志、缓存和设备配置。

这让玩家从 Windows 迁到 Steam Deck 更简单。
也方便测试玩家发存档复现 bug。

结语:路径选择是玩家数据承诺

魏临后来发现,存档路径不是小细节。

它影响权限、云同步、卸载、迁移、备份、诊断和玩家信任。

个人游戏技术选型里,跨平台文件路径很容易被推迟。
因为开发机上通常没问题。

但只要游戏要正式发布,就应该尽早决定:

  • 哪些是存档
  • 哪些是配置
  • 哪些是缓存
  • 哪些进云
  • 哪些跟设备走
  • 玩家如何找到和导出

把玩家数据放对地方,是商业发布的基本功。

继续阅读

探索更多技术文章

浏览归档,发现更多关于系统设计、工具链和工程实践的内容。

全部文章 返回首页