UE4C++学习篇(七)--- 金币类道具拾取后的数据保存(SaveGame)

金币类就是学习篇五和六的Actor创建和碰撞处理,添加完金币的模型和设置完参数,我们就可以处理一下把金币数量保存,下次进入游戏的时候还是上次的金币数量。使用到的类就是SaveGame类。

我这边是把这个读取和加载放到了PlayerController类中处理,没有直接放到角色身上,这里只是学习如何使用,具体应该放到哪里,应该根据自己的需求处理。

变量添加:

//玩家金币数量
int32 PlayerCoins;

//保存游戏的类指针
UFPSSaveGame* SaveGameInstance;

//保存游戏插槽名称
FString SaveGameSlotName;

保存:

//如果不存在,创建
if (!SaveGameInstance)
{
	SaveGameInstance = Cast<UFPSSaveGame>(UGameplayStatics::CreateSaveGameObject(UFPSSaveGame::StaticClass()));
}
//赋值
SaveGameInstance->PlayerCoins = PlayerCoins;
//保存
UGameplayStatics::SaveGameToSlot(SaveGameInstance, SaveGameSlotName, 0);

1.先判断SaveGame类是否存在,不存在,根据CreateSaveGameObject创建一个对象;

2.为自己保存的数值赋值;

3.SaveGameToSlot,根据保存名称和index,保存在自己的这个对象实例中;

读取:

//如果不存在,读取
if (!SaveGameInstance)
{
	SaveGameInstance = Cast<UFPSSaveGame>(UGameplayStatics::LoadGameFromSlot(TEXT("PlayerCoins"), 0));
}
//赋值
PlayerCoins = SaveGameInstance->PlayerCoins;

1.判断存储对象实例是否存在,不存在通过LoadGameFromSlot获取到对象实例;

2.对自己的数据进行赋值;

注:SaveGame类的存储目前是针对比较简单的数据类型进行存储,后续用到复杂的存储时,会另写一篇。

我这边是碰撞到之后,进行一次数据保存。

const AFPSShootingGameCharacter* Character = Cast<AFPSShootingGameCharacter>(OtherActor);
	if (nullptr != Character)
	{
		AFGPlayerController* PC = Cast<AFGPlayerController>(Character->GetController());
		if (nullptr != PC)
		{
			PC->AddPlayerCoins(1);
			//保存数据
			PC->SaveGame();
			int32 num = PC->GetPlayerCoins();
			GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Blue, FString::Printf(TEXT("Player Coins:%d!"), num));
		}
	}

参考:《Ue4C++编程------保存游戏与c++(一)》

作者:li2818

附加:

保存在本地的路径:

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

卡西莫多说

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

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

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

打赏作者

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

抵扣说明:

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

余额充值