首页/ 第 14 章 · 3D 游戏进阶/ 第 246 课
LESSON 246 · 3D 游戏进阶

3D 存档系统(多场景)

3D 存档完成。下一课 3D 章综合练习:小型 3D 游戏。

⏱ 约 15 分钟📊 难度:入门🗂 第 14 章 · 3D 游戏进阶📍 第 246 / 300 课
课程进度
246 / 300

🎯本节学习目标

  • 掌握存档方案
  • 实现 JSON 存档
  • 实现检查点

🚀课程导读

3D 大型游戏要存”角色数据+场景+进度“。本课用 JSON 文件实现专业存档。

存档方案选择

PlayerPrefs vs JSON 文件。

  1. 【PlayerPrefs】适合小数据(设置、金币数)(第 220 课)。
  2. 【JSON 文件】适合复杂数据(角色属性、背包、任务、位置)——结构化。
  3. 【JSON】通用数据格式:{ "hp": 100, "level": 3, ... }
  4. 【序列化】把类转成 JSON 字符串:
  5. [System.Serializable] public class SaveData { public int hp; public float[] position; public List<string> inventory; }
  6. 【写入文件】File.WriteAllText(path, JsonUtility.ToJson(data));
  7. 【读取】SaveData d = JsonUtility.FromJson<SaveData>(File.ReadAllText(path));
  8. 【路径】Application.persistentDataPath 是”游戏专属目录“(各平台自动)。
  9. 【注意】JsonUtility 序列化 public 字段(List/数组可用)。
  10. 【进阶】用 Newtonsoft.Json(第三方)功能更强。
  11. 【完成】理解”选方案“。
  12. 【推荐】复杂存档一律 JSON 文件。
💡
存档方案:小数据 PlayerPrefs、大数据 JSON 文件。JSON 更专业。

实现检查点存档

落地到玩法。

  1. 【SaveSystem 脚本】
  2. public static class SaveSystem {
  3. static string path => Application.persistentDataPath + "/save.json";
  4. public static void Save(SaveData data) {
  5. string json = JsonUtility.ToJson(data, true);
  6. File.WriteAllText(path, json);
  7. }
  8. public static SaveData Load() {
  9. if (!File.Exists(path)) return null;
  10. string json = File.ReadAllText(path);
  11. return JsonUtility.FromJson<SaveData>(json);
  12. }
  13. public static bool HasSave() => File.Exists(path);
  14. public static void DeleteSave() { if (File.Exists(path)) File.Delete(path); }
  15. }
  16. 【检查点触发】检查点(第 218 课)时收集数据并 Save。
  17. 【读取恢复】进游戏场景:Load 后恢复角色位置/属性/背包。
  18. 【跨场景】场景名也存:SaveData.sceneName;读档时 LoadScene。
  19. 【主菜单】”继续游戏“判断 HasSave。
  20. 【测试】存→重开→继续,数据全恢复。
  21. 【注意】using System.IO; 需要引入。
  22. 【完成】专业存档”通了“。
  23. 【进阶】加密/多槽位存档(进阶)。
JSON 存档 = Serializable 数据类 + File 读写 + persistentDataPath。三件套。

常见错误与排查

错误:JSON 读取失败?
原因:字段不匹配或路径不对
解决:确认类字段与 JSON 一致;用 Application.persistentDataPath 路径;加异常处理。

动手练习

课后小任务(做出来才算真的学会)

  • 做 JSON 存档系统
  • 实现检查点自动存档
  • 实现继续游戏读档

本节小结

3D 存档完成。下一课 3D 章综合练习:小型 3D 游戏。

完成打卡后,主站会实时更新你的学习进度 🎯

← 上一课3D 游戏优化(遮挡剔除与 LOD)