崩溃后的体验同样重要
游戏崩溃本身已经很糟,但更糟的是重启后存档损坏、设置丢失、玩家不知道是否要重玩、日志找不到。Steam 玩家遇到崩溃后,下一次启动的体验会影响他是否继续玩、是否退款、是否发差评。
崩溃恢复的目标是降低伤害:保护存档,识别上次异常退出,提供恢复选项,给玩家清楚提示,并为开发者留下日志。
检测异常退出
游戏启动时可以写入运行标记,正常退出时清除。下次启动发现标记仍在,就说明上次可能异常退出。
流程:
| 阶段 | 行为 |
|---|---|
| 启动 | 写入 running.lock 和启动时间 |
| 正常退出 | 删除或标记正常关闭 |
| 下次启动 | 检查上次是否异常 |
| 异常 | 提示玩家并收集日志 |
锁文件不能作为绝对证据,因为系统强制关机也会留下,但它足以触发温和提示。
存档写入保护
崩溃恢复和存档系统紧密相关。写存档时使用临时文件和备份:
- 当前存档复制为备份。
- 写入临时文件。
- 校验临时文件。
- 替换主存档。
- 记录写入完成。
启动检测到上次异常退出后,先检查主存档是否可读,不可读再尝试备份。不要直接覆盖。玩家最关心的是进度是否还在。
未完成事务
有些操作跨多个系统:购买物品扣钱并加入背包,任务完成发奖励并开门,Boss 死亡发成就并保存。崩溃可能发生在中间。可以使用简单事务记录:
transaction_start id=shop_buy item=wpn_hammer cost=120
transaction_complete id=shop_buy
下次启动如果发现未完成事务,可以根据业务决定回滚或补完。个人项目不需要复杂数据库,但关键操作要避免扣钱没给物品这类问题。
配置恢复
崩溃也可能来自错误图形设置、损坏配置、异常输入设备。异常退出后,启动提示可以提供“安全模式启动”或“重置画面设置”。不要默认重置所有配置,更不要影响存档。
安全模式用于恢复进入游戏的能力:
- 窗口模式。
- 中低画质。
- 关闭高风险后处理。
- 默认输入设备。
- 详细日志。
玩家提示
异常启动提示要短而明确:
| 提示内容 | 说明 |
|---|---|
| 上次游戏似乎未正常退出 | 告知情况 |
| 是否使用安全模式启动 | 给选择 |
| 存档已检查或恢复 | 降低焦虑 |
| 可打开日志目录 | 方便反馈 |
不要用技术堆栈吓玩家。详细错误写日志,界面只给可执行选项。
崩溃日志和反馈包
异常退出后可以提示玩家导出反馈包。反馈包包含最近日志、崩溃文件、构建编号、配置摘要、最近存档备份信息。不要包含完整个人路径或账号隐私。
如果玩家愿意提交,开发者能更快定位问题。反馈包生成失败也要有说明。
自动恢复的边界
自动恢复要谨慎。能自动恢复备份存档很好,但涉及覆盖当前文件时,应尽量提示玩家。比如主存档损坏、备份可用,可以提示“发现可用备份,时间为 xx,是否恢复”。玩家至少知道发生了什么。
对于配置文件,可以更主动地恢复默认,因为影响较小;对于存档,要保守。
崩溃后回到哪里
重启后是否继续到崩溃前场景?如果游戏有稳定检查点,可以回到最近检查点。不要尝试恢复到崩溃瞬间的半状态,那可能再次崩溃。安全恢复优先选择稳定点。
例如 Boss 战中崩溃,重启后回到 Boss 门口检查点;商店购买中崩溃,恢复到购买前或购买后明确状态。
发布后支持流程
崩溃反馈要分类:
| 类型 | 处理 |
|---|---|
| 启动崩溃 | 安全模式和配置重置 |
| 读档崩溃 | 存档备份和迁移 |
| 场景崩溃 | 资源和关卡日志 |
| 输入崩溃 | 禁用控制器或重置绑定 |
| 平台功能崩溃 | Steam 初始化和离线降级 |
分类能帮助你写 FAQ 和补丁说明。
QA 清单
| 测试 | 检查 |
|---|---|
| 强制关闭游戏 | 下次启动提示异常 |
| 写存档中断 | 主档或备份可恢复 |
| 配置损坏 | 安全模式可进入 |
| 购买中崩溃 | 不扣钱丢物 |
| Boss 战崩溃 | 回到稳定检查点 |
| 反馈包 | 日志和构建号完整 |
最终检查清单
- 启动和退出有异常检测标记。
- 存档写入使用临时文件和备份。
- 关键操作有简单事务或恢复策略。
- 安全模式不影响存档。
- 异常提示给玩家可执行选项。
- 反馈包包含日志、构建和配置摘要。
- 自动恢复对存档保持谨慎。
- QA 模拟强制关闭和损坏文件。
崩溃不可能在所有环境中完全避免,但恢复路径可以提前设计。个人 Steam 游戏只要保护好玩家进度,并给出清楚下一步,就能显著降低崩溃带来的伤害。
恢复流程要演练
崩溃恢复不能只写在代码里,要定期演练。可以准备几种模拟:启动后强制结束进程,写存档时中断,配置文件写入一半,删除关键资源包,读旧存档时抛异常。每种场景都看下一次启动是否有提示,存档是否可恢复,日志是否足够定位。
演练表可以这样:
| 场景 | 期望 |
|---|---|
| 强制结束进程 | 下次启动提示异常退出 |
| 主存档损坏 | 自动发现备份并询问恢复 |
| 配置损坏 | 备份旧配置并重建默认 |
| 资源缺失 | 提示验证文件完整性 |
| 事务中断 | 回滚或补完操作 |
这些测试成本不高,却能避免玩家第一次遇到恢复流程时才发现它不可用。
和 Steam 云同步的关系
崩溃恢复要小心云同步。如果本地存档损坏后立刻同步到云端,备份价值会降低。恢复流程应先确认本地主存档和备份,再决定是否写入云端。发现异常时,可以暂缓云写入,等玩家选择恢复后再同步。
云冲突提示也要清楚。玩家在两台机器上崩溃恢复时,时间戳、章节和游玩时长比单纯文件名更有帮助。
玩家沟通语气
崩溃后的提示要避免责怪玩家或设备。用“上次游戏似乎未正常退出”比“检测到错误操作”更合适。给出可执行选项:继续、使用安全模式、恢复备份、打开日志目录。玩家已经遇到问题,界面要减少焦虑。
支持文档中也要说明恢复不会删除存档,除非玩家主动选择重置配置。这能提升信任。
恢复界面不要太复杂
异常启动时,玩家需要的是少量清楚选项。可以提供“继续正常启动”“使用安全模式”“恢复最近备份”“打开日志目录”。不要在同一界面放十几个技术按钮。复杂界面会让玩家更紧张,也更容易误操作。
如果检测到存档损坏,恢复备份按钮要显示备份时间、章节或游玩时长。玩家能判断是否值得恢复。恢复前先复制当前损坏文件到隔离目录,避免后续排查时证据丢失。
崩溃恢复和补丁
有些崩溃来自版本 bug,补丁修复后还要考虑已受影响玩家。比如旧版本写出了半损坏配置,新版本启动时要能识别并迁移;旧版本造成任务状态停在非法阶段,新版本要有修复逻辑。补丁说明里可以写“启动时会自动修复部分异常配置”,让玩家知道不需要手动删文件。
恢复逻辑也要保留一段时间。不要补丁后立刻删除迁移代码,因为不是所有玩家都会马上更新。
支持回复模板
准备一份崩溃支持模板:询问构建号、发生场景、是否安全模式可启动、日志目录、最近存档时间。模板能减少来回沟通。玩家反馈越容易提交,开发者越快定位。
恢复逻辑的版本记录
恢复代码本身也会变化。每次修改存档恢复、配置恢复或事务补偿逻辑,都要记录版本。这样玩家反馈“更新后恢复提示变化了”时,开发者知道是哪次补丁影响。恢复逻辑不应频繁重写,越稳定越好。
可以在日志中写入 recovery_version。这对排查旧版本遗留问题很有用。
什么时候公开说明
如果崩溃影响启动或存档,就应该在公告里说明修复和恢复方式。如果只是低频视觉崩溃,可以放在普通补丁说明。涉及玩家进度时,沟通要更主动:是否会自动恢复,是否需要备份,是否建议暂缓加载某个旧存档。
玩家看到开发者明确说明恢复路径,通常会更愿意继续提供日志。
恢复路径也要防重复触发
如果玩家连续两次异常退出,恢复提示不要反复覆盖同一份备份。可以保留最近几份备份,并标记哪一份已建议恢复。这样玩家多次尝试启动时,不会把可用备份冲掉。
恢复流程越接近存档,就越要保守。能复制就先复制,能询问就不要静默覆盖。
继续阅读
探索更多技术文章
浏览归档,发现更多关于系统设计、工具链和工程实践的内容。