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

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

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

变量添加:

//玩家金币数量
int32 PlayerCoins;

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

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

保存:

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

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

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

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

读取:

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

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

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

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

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

const AFPSShootingGameCharacter* Character = Cast(OtherActor);
	if (nullptr != Character)
	{
		AFGPlayerController* PC = Cast(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

附加:

保存在本地的路径:

UE4C++学习篇(七)--- 金币类道具拾取后的数据保存(SaveGame)_第1张图片

 

你可能感兴趣的:(UE4C++,ue4,学习,游戏开发)