UE游戏保存/加载存档功能详解
UE游戏保存/加载存档功能详解
在游戏开发中,存档系统是确保玩家能够保存游戏进度并从上次离开的地方继续游戏的重要功能。本文将详细介绍如何在Unreal Engine(UE)中实现游戏存档的保存和加载功能,包括创建保存游戏对象、检查存档是否存在、加载存档、保存存档、删除存档以及异步保存存档等功能。
UE游戏存档功能概述
在Unreal Engine中,存档功能主要通过以下函数实现:
函数名 | 功能 |
---|---|
Create Save Game Object | 创建保存游戏对象 |
Does Save Game Exist | 检查存档是否存在 |
Load Game from Slot | 加载存档 |
Save Game to Slot | 保存存档 |
Delete Game in Slot | 删除存档 |
Async Save Game To Slot | 异步保存存档 |
存档操作都是通过插槽名字(Slot Name)来读取/加载/检查/删除的。首先需要创建一个SaveGame
类,这个类里可以存放要保存的数据,比如玩家的位置、名字、金钱、经验等。所有基本数据类型、数组、集合、映射类型、结构体都可以保存,但引用类型的变量不能保存。
实现步骤
1. 创建保存游戏对象
打开蓝图(BP_Save),这里保存玩家的位置。
2. 创建界面蓝图
创建一个控件蓝图,画出界面。
3. 设置BeginPlay事件
在第三人称蓝图中,先设置默认加载存档的逻辑(根据游戏玩法/业务需求编写)。
游戏开始时,先检查有没有存档。如果有存档就加载存档并设置玩家存档的位置;如果没有存档就创建一个空白对象和位置变量,然后保存存档,接着加载这个存档。
4. 实现按钮逻辑
回到控件蓝图,编写三个按钮的控件逻辑:
- 开始游戏按钮:清空存档,重新打开一个新关卡
- 保存存档按钮:检查插槽是否存在,如果存在就获取位置并保存存档
- 加载存档按钮:检查完直接设置角色存档位置
5. 实现界面显示逻辑
回到第三人称蓝图,设置按下Tab键召唤界面,再次按下界面消失。
注意事项
Save Game to Slot
节点调用后,在没打包之前会在项目文件本地建立SaveGames
文件夹下保存.sav
文件。在项目打包完以后并不会存储在相应的.exe目录下,系统默认存储在C盘。这意味着应用的存档在复制到其他电脑时会丢失存档。不过可以通过修改C++代码更改默认存储路径。Async Save Game To Slot
节点可以实现异步保存存档,防止突然的帧率卡顿,让玩家不容易注意到。
GameInstance的使用
2025年1月7日补充:
如果需要在关卡之间保存数据,建议将数据存储在GameInstance中。GameInstance在整个游戏运行期间存在,并且可以在不同的关卡之间共享数据。例如,玩家在一个关卡中的角色属性(如生命值、经验值)或者游戏进度相关的数据(如已完成的任务列表)可以存储在GameInstance中。这样,当玩家进入下一个关卡时,这些数据依然可以被访问和使用。
数据存储在内存中的好处是读写速度相对较快。然而,这种存储在内存中的数据是临时性的。当游戏进程结束时,内存中的数据会随之消失。如果想要长期保存游戏数据,需要将数据存储到非易失性存储介质中,如硬盘等。可以通过文件系统将数据序列化并保存到本地文件中,或者使用数据库等方式来实现持久化存储。
如果是网络游戏,那数据就是保存在服务器数据库中了,暂时还没研究。。。以后学会了在这里补充~