结语:
本篇是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);
}