28. SaveGame
定义和功能
- 定义
- SaveGame 继承自 UObject,用于实现游戏存档的数据序列化与持久化。
- 功能
- 提供简易的序列化机制,能直接将蓝图或 C++ 中的属性保存到硬盘文件中。
- 与 UGameplayStatics 配合,使用 SaveGameToSlot、LoadGameFromSlot 等接口实现存档和读档。
- 默认使用 FGenericSaveGameSystem 进行本地文件的读写,亦可通过实现 ISaveGameSystem 自定义存储方式(云存档、网络等)。
设计理念
- 面向游戏开发的简化操作
- UE 通过 Blueprint 可视化接口,让开发者无需关心底层读写逻辑,即可完成玩家存档功能。
- 与 UObject 的序列化机制深度结合
- 得益于 UObject 的反射及序列化特性,任何在 SaveGame 中声明的变量都能自动参与存档与读档流程。
- 灵活的扩展性
- 通过 ISaveGameSystem 可以更换存档实现方式,适应不同平台或多种需求(如多人在线数据、云存储等)。
相关类关系
- 与 UGameplayStatics
- 提供静态方法(CreateSaveGameObject、SaveGameToSlot 等)调用 SaveGame 对象的序列化流程。
- 与 GameInstance
- GameInstance 中的临时全局数据若需长期持久化,可在合适时机调用 SaveGame 的相关接口进行存储或恢复。
- 与 FGenericSaveGameSystem
- 默认的存储实现类,实现了在本地文件系统上的读写操作。
游戏场景例子
- 玩家进度存储
- 将玩家的关卡进度、角色等级、背包物品等数据写入 SaveGame 并保存到磁盘,避免游戏退出后丢失。
- 跨平台同步
- 替换为自定义的 SaveGameSystem,让存档可同步到云端,在不同设备上保持玩家数据一致。
- 快速存档与读档
- 在关卡运行中,可以随时调用 SaveGameToSlot 进行快速存档,再通过 LoadGameFromSlot 读取该进度,恢复游戏状态。