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

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

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

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要在UE5中进行POST请求,有几个方法可以实现。首先,你可以编写自己的C++方法来实现。另外,你也可以使用一些相关的HTTP请求插件,比如Varest、Http Request、Http Blueprint For Web等等插件来实现。这些插件可以帮助你发送HTTP请求并处理返回的数据。 如果你遇到了POST请求变成OPTIONS以及报错信息的问题(跨域),你可以使用qs.stringify方法来解决。首先,你需要安装qs库,你可以使用npm install qs –save来进行安装。然后,在你的接口请求页面中引入qs库,并使用qs.stringify来改变传递的参数。这样可以解决POST请求变成OPTIONS的问题。 在UE5的蓝图事件中,你可以按照以下步骤来设置POST请求: 1. 创建返回对象和请求对象。 2. 将参数设置赋予请求对象。 3. 将返回值赋予返回对象。 4. 修改请求模式为POST。 通过以上方法,你可以在UE5中进行POST请求操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [【虚幻引擎UEUE5 三种模式调用API详解(案例基于免费Varest插件)](https://blog.csdn.net/qq_35079107/article/details/126887522)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [解决在Vue中使用axios POST请求变成OPTIONS的问题](https://download.csdn.net/download/weixin_38713412/14801445)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

卡西莫多说

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

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

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

打赏作者

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

抵扣说明:

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

余额充值