[UE4入门笔记(20)] 57.游戏存档读取 58.游戏存档写入 --梁迪老师UE4纯C++&Slate开发沙盒游戏

本文介绍了UE4入门学习笔记的最后部分,重点是游戏存档的读取和写入。通过创建自定义的SaveGame类,保存和读取玩家位置等数据,以及在GameMode中实现存档加载和保存的函数。此外,强调了课程中关于C++函数调用逻辑和设计思想的重要性。
摘要由CSDN通过智能技术生成

结语:

本篇是UE4入门笔记的最后一篇。回顾这20篇博客,我认为从这门课程中学到的最重要的东西,是C++的函数调用逻辑与设计思路。即使今后不准备继续深耕于UE4,梁迪老师这门课程也是一门很好的C++教程。
我不得不承认,如果没有看过梁迪老师的课程,单独看我的这些博客,可能会觉得不知所云:这本就是一个小众领域中小众课程的学习分享。或许因此,自发布以来,本专栏一直阅读量寥寥。幸运的是我并不是毫无回应,我看到有UE4开发者同道、语言学习者关注我,也有人评论认可我,这也就是我撰写本专栏的意义了。若诸位觉得我的分享有些许帮助,还请宣传给更多的开发者同道们。谢谢!


本篇学习内容:

57.游戏存档读取
58.游戏存档写入


57.游戏存档读取

(1)手动在场景里添加很多敌人、树木、石头

(2)创建SlAiSaveGame(继承于SaveGame

可以在SaveGame.h文件里定义一些变量,然后通过UE4保存在某个本地文件,然后在读取时实例化这个类,就可以读到保存的数据。

如:用于保存玩家位置的变量:

	UPROPERTY(VisibleAnywhere, Category = "SlAi")
		FVector PlayerLocation;

(3)在GameMode中:

protected:
	//存档加载
	void LoadRecord();
	//给背包加载存档,这个函数需要在第二帧运行,否则快捷栏还没有初始化,会导致游戏崩溃
	void LoadRecordPackage();
private:
	//是否需要加载存档
	bool IsNeedLoadRecord;
	
	//游戏存档指针
	class USlAiSaveGame* GameRecord;

LoadRecord()函数即给世界中的物体赋值。由于循环赋值的迭代器由GetWorld()获取,所以,在所赋物体数量超过存档中保存的数量时,就命令该资源下一帧销毁。

58.游戏存档写入

(1)在GameMode中:


public:
	//保存游戏
	void SaveGame();

随后去GameHUD绑定委托:

	//保存游戏委托绑定
	GameHUDWidget->GameMenuWidget->SaveGameDele.BindUObject(GM, &ASlAiGameMode::SaveGame);

(2)实现SaveGame()函数

SaveGame()函数本质上就是创建一个新的存档变量,然后给它的元素赋值。

void ASlAiGameMode::SaveGame(){

	//创建一个新的存档
	USlAiSaveGame* NewRecord = Cast<USlAiSaveGame>(UGameplayStatics::CreateSaveGameObject(USlAiSaveGame::StaticClass()));

...

	//将存档保存到本地文件

	//如果已有数据,先删除
	if (UGameplayStatics::DoesSaveGameExist(SlAiDataHandle::Get()->RecordName, 0)) {
		UGameplayStatics::DeleteGameInSlot(SlAiDataHandle::Get()->RecordName, 0);
	}
	//开始保存
	UGameplayStatics::SaveGameToSlot(NewRecord, SlAiDataHandle::Get()->RecordName, 0);
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值