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++存储和读取效果

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

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

在Unreal Engine (UE) 5中,C++和蓝图是两种主要的开发工具和编程语言,它们各自有其优点和适用场景。 1. **C++**: - **语言特性**:C++ 是一种静态型、编译式强型的系统级编程语言,提供了丰富的底层控制和性能优化能力。 - **代码编写**:使用C++进行游戏开发,开发者可以直接操作内存,调用硬件API,并编写复杂的数据结构和算法。 - **学习曲线**:对于有经验的程序员来说,C++ 学习成本相对较高,但能提供更大的灵活性。 - **性能**:C++ 编写的游戏通常具有更高的运行速度和更低的内存开销。 2. **蓝图(Blueprint)**: - **可视化编程**:蓝图通过拖放节点和连线的方式,构建游戏逻辑,似于流程图,无需编写复杂的代码。 - **易用性**:适合初学者和快速原型开发,降低了编程门槛,更侧重于交互设计和逻辑构建。 - **可维护性**:对于逻辑复杂的部分,蓝图可能不如C++易于理解和维护。 - **扩展性**:虽然蓝图可以通过UCLASS和UFUNCTION等机制实现一定程度的自定义和扩展,但功能限制比C++更明显。 **区别总结**: - C++ 是一种底层编程语言,更适合对性能和代码控制有严格需求的专业开发者。 - 蓝图则更适合快速开发和原型制作,尤其是对于不熟悉编程或希望重点放在创意设计上的团队。 - 在 UE 5 中,二者可以结合使用,C++用于编写核心组件和性能敏感的部分,而蓝图则负责用户界面和非线程逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卡西莫多说

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值