UE5C++学习(四)--- SaveGame类存储和加载数据

上一篇说到使用数据表读取数据,如果我开始玩游戏之后,被怪物打了失去了一部分血量,这个时候我想退出游戏,当我再次进入的时候,希望仍然保持被怪物打之后的血量,而不是重新读取了数据表,这个时候就需要使用SaveGame类去存储和加载数据。注:SaveGame类的存储是放在本地的。

创建SaveGame类

这里继续使用上一篇中的UserInfo,添加需要保存的数据:

复制代码
    UPROPERTY()
	int32 SavedLevel;
	UPROPERTY()
	float SavedCurrentHealth;
	UPROPERTY()
	float SavedCurrentMana;
	UPROPERTY()
	float SavedCurrentExp;

创建两个变量:

复制代码
    /*
	 * 存储的实例变量
	 */
	UGridShootSG* GridShootSG;
	/*
	 * 存储的插槽名称
	 */
	FString SlotName = "UserInfo";

存储和加载方法:

复制代码
    /*
	 * 存储
	 */
	void SaveGame();
	/*
	 * 读取存储的数据
	 */
	void LoadSaveGame();

如果SG变量不存在,那么就去创建一个存储的Object,再去赋值,并使用SaveGameToSlot存储;

复制代码
void ABaseCharacter::SaveGame()
{
	if (!GridShootSG)
	{
		GridShootSG = Cast<UGridShootSG>(UGameplayStatics::CreateSaveGameObject(UGridShootSG::StaticClass()));
	}
	GridShootSG->SavedLevel = Level;
	GridShootSG->SavedCurrentHealth = CurrentHealth;
	GridShootSG->SavedCurrentMana = CurrentMana;
	GridShootSG->SavedCurrentExp = CurrentExp;
	UGameplayStatics::SaveGameToSlot(GridShootSG,SlotName,0);
}

加载方法,SG如果不存在,就先去读取,再进行赋值。

复制代码
void ABaseCharacter::LoadSaveGame()
{
	if (!GridShootSG)
	{
		GridShootSG = Cast<UGridShootSG>(UGameplayStatics::LoadGameFromSlot(SlotName,0));
	}
	Level = GridShootSG->SavedLevel;
	CurrentHealth = GridShootSG->SavedCurrentHealth;
	CurrentMana = GridShootSG->SavedCurrentMana;
	CurrentExp = GridShootSG->SavedCurrentExp;
}

在一开始读取数据的时候,去进行判断

复制代码
void ABaseCharacter::ReadData()
{
	//是否存在SaveGame,存在的话就读取SaveGame的数据,否则就读取表格数据
	bool IsSavedExist = UGameplayStatics::DoesSaveGameExist(SlotName,0);
	if (IsSavedExist)
	{
		LoadSaveGame();
		LoadUserLevelInfoTable();
	}
	else
	{
		LoadUserLevelInfoTable();
		SaveGame();
	}
}

这样的话就能看到一个效果,一开始没有存储之前,是去读取数据表,血量是满的,在这里我在角色被攻击的时候去存储一下,当我退出之后,再去进入游戏,就是被攻击之后的血量。

效果如下:

UE5C++存储和读取效果

当存储成功之后,在项目路径下就可以看到存储的文件

注意该文件不要以记事本或者其他编辑工具打开,因为该文件是二进制文件,用其他方式打开会毁坏文件。

相关推荐
中科高级技工学校8 小时前
乌鲁木齐中医康复学习经历分享
大数据·学习
JavaPub-rodert10 小时前
具身智能行业技术全景:从感知、规划、控制到 VLA 与机器人学习
学习·机器人
知识分享小能手11 小时前
概理论与数理统计学习教程,从入门到精通,在数理统计中应用R软件(22)
开发语言·学习·r语言
陈年老古董12 小时前
CentOS编译安装Python3.11完整教程
linux·笔记·学习·centos·python3.11
戈文波Geir-Wenbo Ge13 小时前
深度七步:从学习到主宰
学习
clorinda13 小时前
OpenCV实战学习记录:图像拼接与答题卡识别
人工智能·opencv·学习
red_redemption13 小时前
自由学习记录(221)
学习·renderdoc
sel_913 小时前
【OPD论文导读(二)】OPD(On-Policy Distillation)全景调研:十篇论文讲透“在自己生成的内容上学习“这件事
人工智能·python·深度学习·学习·算法·语言模型
动词ing13 小时前
【学习笔记】数据结构(数组长度和关键特性+快慢指针+左右指针)
数据结构·笔记·学习
老当益壮梁奶奶13 小时前
Linux 软件编程学习笔记(六):线程编程入门与实践
linux·c语言·c++·笔记·学习