建议你在使用 Flexi Archive 前,先打开 Sample 案例。 Engine/Unity/Sample/Scenes/Demo1
在 Sample 案例中,你可以快速学习到 Flexi Archive System 的核心功能。
设置用户ID #
Flexi Archive 存档系统支持同一设备下多账号存档共存。
因此若你的程序含登录业务,那么需要你在用户登录成功后设置 USER_KEY 。示例:DataArchiveConstData.USER_KEY = "Wenen";
初始化存档系统 #
Flexi Archive 支持你同时创建多个存档系统的实例,这些存档系统之间是隔离的。
你需要初始化对应的存档系统实例,例如Sample案例中的DataManagerSample类,在合适的时候执行它的Init函数。DataManagerSample.instance.Init();
存档的读写 #
Flexi Archive 提供了多种存档读写的操作方案,包括:
1.持有DataObject操作存档 存档的读写 - Flexi Archive
2.对象字段与数据绑定 对象字段与数据绑定 - 简化存档流程
其中DataObject是核心,但对象字段与数据绑定的操作也极大地简化了存档流程。
以下是对这两种存档操作的简要介绍:
持有DataObject操作存档 #
1.通过 GroupKey + DataKey 得到一个DataObject实例:archiveManager.GetDataObject("group1", "key1");
。
2.DataObject相当一个数据管理容器,我们可以从DataObject中获取到具体的数据对象。例如持有String值的数据对象 - DataString:
DataString dataString = dataObject.GetData<datastring>();
3.写入数据:
dataString.Write("温文,一个喜欢创造的游戏开发工程师。");
4.读取数据:
private string Demo2_ReadStrFromDisk()
{
DataObject dataObject = archiveManager.GetDataObject("group1", "key1");
DataString dataString = dataObject.GetData<DataString>();
string str = dataString.DiskData;
return str;
}
对象字段与数据绑定 #
对象字段与数据绑定是Flexi Archive提供的另一种简化存档流程的操作方案。这种方式利用了数据绑定的特性,使得对象字段的变化能够自动反映到存档数据中,从而简化了存档操作。
代码示例:( 更多绑定方式见文档 : 对象字段与数据绑定 - 简化存档流程 )
public class DataContainerForSave_Sample : FlexiDataContainer
{
public string author
{
get => GetMemoryValue<DataString, string>("FlexiDataSave","author");
set => ModifyValue<DataString, string>("FlexiDataSave","author", value);
}
public int age
{
get => GetMemoryValue<DataInteger, int>("FlexiDataSave","age");
set => ModifyValue<DataInteger, int>("FlexiDataSave","age", value);
}
public DataContainerForSave_Sample(IFlexiDataArchiveManager dataArchiveManager)
{
SetDataArchiveManager(dataArchiveManager);
}
}
保存存档 #
注意:以上对数据的修改,只会使 Memory 的数据发生变化。你需要在合适的时机,执行保存。
Flexi Archive 支持异步存档,你可以选择存档操作是否异步执行。
private void Demo_SavePoint(bool isAsync)
{
Debug.Log(string.Format($"save archive"));
if (isAsync)
{
archiveManager.SaveAsync(() => { Debug.Log("async save successfully");});
}
else
{
archiveManager.Save();
Debug.Log("save successfully");
}
}
切换存档 #
private void SwitchArchive(int archiveID)
{
archiveManager.SwitchArchiveID(archiveID);
Debug.Log(string.Format($"Switch Archive {archiveID}"));
}
如若获取当前的所有存档ID,如下:archiveManager.ArchiveSetting.GetAllArchiveID();
。如此你可以将他们展示在界面上,使用户交互。
克隆存档 #
Flexi Archive提供了克隆存档操作,用户可以从当前存档克隆出一份新存档。archiveManager.InstantiateNewArchive();
删除存档 #
删除当前存档的全部数据
private void Demo_DeleteCurrentArchive()
{
archiveManager.DeleteAll();
Debug.Log(string.Format($"Delete Current All Data"));
}