函数名 | 功能 |
---|---|
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
类 , 这个类里可以存放要保存的数据 , 比如 玩家的位置 / 名字 / 金钱 / 经验 等 ,所有基本数据类型都是可以保存的,数组集合映射类型,结构体都可以保存,引用类型的变量不能保存
打开BP_Save
这里我就保存玩家的位置
我们再创建一个控件蓝图
, 画个界面
然后到第三人称蓝图 先搞个BeginPlay 默认加载存档 (可以根据自己 游戏玩法/业务需求 写)
(2025.1.7回来补充:这里要写在GameInstance里才对!)
游戏开始时候先检查 有没有存档 , 如果有存档就加载存档 设置玩家存档的位置 , 如果没有存档就创建一个空白对象和位置变量 , 然后保存存档 , 接着加载这个存档
然后回到控件蓝图 , 写三个按钮的控件逻辑
开始游戏就清空存档 , 重新打开一个新关卡
保存存档先检查插槽是否存在 , 如果存在就获取位置保存存档
加载存档也是一样 , 检查完直接设置角色存档位置就行了
然后再回到第三人称蓝图
按下Tab键 召唤界面 , 再按下界面就消失
需要注意: save game to slot 节点调用后,如果在没打包之前会在项目文件本地建立SaveGames文件夹下保存.sav。 在项目打包完以后并不会存储在相应的.exe目录下,系统默认存储在C盘。 这就意味着我们的应用的存档再copy到其他电脑的时候会丢失存档
,不过我们可以通过修改c++更改默认存储路径。
Async Save Game To Slot| 异步保存存档 可防止突然的帧率卡顿,让玩家不容易注意到
2025.1.7补充:
如果从一个关卡到另一个关卡,要保存关卡数据,就要把数据存在GameInstance里,GameInstance的数据也是存在内存中的,随进程结束而消失
GameInstence解释:
关于 GameInstance 存储关卡数据
GameInstance 是 UE(Unreal Engine)中的一个类,它在整个游戏运行期间存在,并且可以在不同的关卡之间共享数据。当需要保存关卡数据并在关卡切换后继续使用这些数据时,使用 GameInstance 是一个不错的选择。例如,玩家在一个关卡中的角色属性(如生命值、经验值)或者游戏进度相关的数据(如已完成的任务列表)可以存储在 GameInstance 中。这样,当玩家进入下一个关卡时,这些数据依然可以被访问和使用。
数据存储在内存中的特点
数据存储在内存中的好处是读写速度相对较快。当数据存储在 GameInstance 中时,游戏可以快速地获取和修改这些数据,以实现游戏逻辑。然而,正如你所说,这种存储在内存中的数据是临时性的。当游戏进程结束时,内存中的数据会随之消失。这是因为内存是一种易失性存储介质,它需要持续的电力供应来维持数据的存储状态。一旦游戏进程终止,操作系统会回收游戏所占用的内存空间,存储在其中的数据也就丢失了。
如果想要长期保存游戏数据,例如玩家希望下次打开游戏时能够继续从上次离开的地方开始,就需要将数据存储到非易失性存储介质中,如硬盘等。可以通过文件系统将数据序列化(例如将数据结构转换为可以存储的字节流)并保存到本地文件中,或者使用数据库等方式来实现持久化存储。
如果是网络游戏,那数据就是保存在服务器数据库中了,暂时还没研究。。。以后学会了在这里补充~
更多可参考官方文档:
https://dev.epicgames.com/documentation/zh-cn/unreal-engine/saving-and-loading-your-game-in-unreal-engine