在游戏开发中,存储(Save)与加载(Load) 系统至关重要,玩家需要能够保存游戏进度、角色状态、道具数据等信息,并在下次启动游戏时恢复它们。UE5 提供了 SaveGame 蓝图类,帮助开发者快速实现数据持久化。本篇文章将学习 存储系统的工作原理,并通过蓝图实现 角色状态(血量、分数)存储 与 数据读取,确保游戏进度不会丢失。
理论学习
- 什么是 SaveGame ?
UE5 提供了 SaveGame 蓝图类 来管理数据存储:- 创建 SaveGame 对象,存储玩家的游戏数据。
- 将数据保存到本地文件(自动存储到 Saved/SaveGames 文件夹)。
- 加载存档,在游戏启动时恢复存储的数据。
- SaveGame 适合存储哪些数据?
- 玩家状态(血量、得分、等级)。
- 道具库存(背包内的道具)。
- 关卡进度(已解锁的关卡、任务状态)。
- 角色位置(重新进入游戏时恢复角色站立位置)。
实践任务:存储角色血量与分数
目标
- 存储角色数据
- 角色的 血量(Health) 和 得分(Score) 可以被保存。
- 读取存档
- 角色在游戏启动时,自动加载上次存档的血量和分数。
步骤 1:创建 SaveGame 蓝图
-
新建 SaveGame 类
- 在 Content Browser,右键 Blueprint Class。
- 在搜索框输入 SaveGame,选择 SaveGame 类。
- 命名为 BP_PlayerSave,然后双击打开。
-
添加存储变量
在 BP_PlayerSave 里,创建以下变量:- SavedHealth(Float):存储角色血量。
- SavedScore(Integer):存储角色分数。
步骤 2:创建存档逻辑
- 在角色蓝图 BP_PlayerCharacter 中添加存储功能
-
创建 SaveGame 实例
-
在角色蓝图(BP_PlayerCharacter)的 Event Begin Play 事件中:
-
如果存档存在:
- 调用 LoadGameFromSlot 并读取数据。
-
如果存档不存在:
- 创建新的 SaveGame 实例,并存储默认数据。
-
将存档数据存放到变量中
-
-
存档数据
- 在角色受伤或获得分数时(用键盘按钮事件模拟),自动存储数据:
- 这样,角色的血量和分数将在变化时被记录。
-
步骤 3:创建加载逻辑
- 读取存档数据
- 在游戏启动时,从 SaveGame 文件加载数据:
- 设置角色数据
- 读取 SavedHealth 和 SavedScore 并赋值给角色:
- 确保 UI 也同步更新
- 如果游戏有 血量条和得分 UI,需要调用 UI 更新函数,让 UI 反映最新的数据。
- 如果游戏有 血量条和得分 UI,需要调用 UI 更新函数,让 UI 反映最新的数据。
步骤 4:测试存储系统
- 启动游戏,按X键让角色受伤,观察血量减少,按P键获得分数,观察分数增加。
- 然后退出游戏。
- 重新启动游戏,观察角色血量和分数是否恢复到推出之前的状态。
学习收获
通过今天的学习,你掌握了:
- 如何使用 SaveGame 蓝图类存储玩家数据。
- 如何读取 SaveGame 存档,在游戏启动时恢复角色状态。
下一步学习计划
接下来,我们将进入 综合项目实战阶段,整合所有已学知识,开发一个完整的 小型游戏项目!🚀