SuperAPI AI 工具集

unity-save-system

数据与分析

查看项目

更新于 10-16 01:37

技能介绍

用途:为 Unity 项目设计存档/读档系统,解决常见失败点,例如滥用 PlayerPrefs、序列化脆弱且无版本管理、忽略移动端持久化需求。

主要能力(决策模式):

  1. 序列化格式选择:JsonUtility(可读、可调试、体积小,不支持字典/多态,多数游戏默认);Newtonsoft(支持字典、多态、LINQ,适合复杂存档);二进制或 MessagePack(性能敏感、大存档、防篡改);BinaryFormatter 明确禁止使用,存在反序列化任意代码执行漏洞且已被弃用。
  2. 存档数据结构:单一大存档或按系统分文件;DTO 用普通 C# 类加 [System.Serializable],不用 MonoBehaviour/ScriptableObject;系统实现 ISaveable 接口参与读写。
  3. 存档位置:默认用 Application.persistentDataPath,streamingAssetsPath 在构建中只读,PlayerPrefs 仅用于设置。路径用 Path.Combine,写前确保目录存在。
  4. PlayerPrefs 作用域:设置项多时用带前缀键的包装类,避免键冲突;无 bool 类型用 int 0/1;移动端重要变更后手动调用 PlayerPrefs.Save()。
  5. 版本与迁移:存档内保存 int version,加载时按 v1→v2→v3 顺序迁移;迁移需在原始 JSON 上操作(旧类型可能已不存在),可用 Newtonsoft JObject;纯新增字段可用宽容读取。
  6. 云存档:本地优先保存,再后台尽力同步到 Unity Cloud Save,网络失败不应影响本地游玩;冲突可用最后写入优先或时间戳。
  7. 自动存档:检查点、定时、事件驱动三种策略;移动端在 OnApplicationPause(true) 保存,OnApplicationQuit 用同步 I/O;避免在 Update 中同步保存,可用 BackgroundThreadAsync。

必要用法要点:原子写入(先写 .tmp 再重命名)防止写入崩溃损坏存档;JsonUtility 不能序列化字典,需转 List 或改用 Newtonsoft;Vector3 建议用 float[] 提升可移植性。

限制:资料未提供具体安装命令、收费信息或平台支持细节;内容为架构决策模式与代码骨架,需结合项目实际调整。