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

结语:

本篇是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);
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
引用:UE5中的背包系统有6个文件,分别是ContainerBaseWidget、ContainerInputWidget、ContainerNormalWidget、ContainerOutputWidget、ContainerShortcutWidget和PackageWidget。其中,Input、Normal、Output、Shortcut类都继承自ContainerBaseWidget。 引用:在重写ContainerShortcutWidget的ResetContainerPara函数时,会调用父类的事件,并在中间判断是否有改变。如果有改变,会执行快捷栏修改更新委托,传出快捷栏序号以及新的物品ID。 根据以上引用内容,我理解您的问题是关于UE5中的widget switch的。根据提供的引用内容,我无法找到与widget switch直接相关的信息。如果您需要更具体的信息,请提供更多的上下文或引用内容,以便我能够为您提供更准确的答案。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [[UE4入门笔记(15)] 47.Widget获取位置和大小 48.背包系统 --梁迪老师UE4C++&Slate开发沙盒游戏](https://blog.csdn.net/peaes/article/details/129578859)[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* [UE5使用Advanced-VR-Framework开发VR介绍](https://blog.csdn.net/qq_17523181/article/details/130381329)[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 ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值