1. 认识FArchive:数据存储的万能工具箱
第一次接触UE5的FArchive时,我完全被这个神秘的名字唬住了。"Archive"听起来像是某种历史档案馆,但实际上它是Unreal Engine中最实用的数据读写工具。简单来说,FArchive就像是一个数据转换器,能把游戏中的各种对象变成可以存储的字节流,也能把这些字节流重新变回可用的对象。
想象一下你在玩积木游戏。序列化就是把搭好的积木城堡拆解成一块块标准积木,整齐地放进盒子里(保存到文件);反序列化就是按照同样的顺序把积木从盒子里拿出来,重新搭建成原来的城堡(从文件读取)。FArchive就是这个过程中负责拆解和重建的"魔术手"。
在实际项目中,我经常用FArchive来处理这些场景:
- 保存玩家游戏进度
- 存储关卡编辑器的自定义数据
- 网络同步时的数据打包
- 资源热更新的版本信息存储
它的核心优势在于统一的接口。无论是保存还是读取,你都用同样的<<操作符,这让代码既简洁又不容易出错。下面这段代码展示了FArchive最基本的工作方式:
cpp复制// 创建一个用于写入的Archive
TUniquePtr<FArchive> FileWriter(IFileManager::Get().CreateFileWriter(*FilePath));
if (FileWriter)
{
*FileWriter << MyData; // 写入数据
FileWriter->Close();
}
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 创建你的第一个数据文件
让我们从一个实际案例开始。假设我们要保存玩家的基础信息:等级、位置和名字。在UE中,这个过程就像是在填写一张表格,然后把表格放进文件夹归档。
首先,我们需要准备要保存的数据:
cpp复制// 准备玩家数据
float PlayerLevel = 15.0f;
FVector PlayerLocation = FVector(120.0f, 350.0f, 50.0f);
FString PlayerName = TEXT("冒险者小明");
创建写入器时,我建议使用绝对路径开始练习,等熟悉后再改用项目相对路径。这里有个小技巧:在Windows上,路径中的斜杠最好用双斜杠或者TEXT宏包裹:
cpp复制// 创建文件写入器
FString FilePath = TEXT("D:\\MyGame\\PlayerData.dat");
FArchive* Writer = IFileManager::Get().CreateFileWriter(*FilePath);
写入数据的过程出奇地简单,就像用cout输出到控制台一样:
cpp复制if (Writer)
{
*Writer << PlayerLevel;
*Writer << PlayerL
