尝试了一下,Easy Save可以保存 基本数据类型(Integer,Double等)和部分引用(集合:Array、List。。。、Struct等),我尝试 可以保存 GameObject 和 预制体。
1、基本的操作
1)Save
官方文档链接: https://docs.moodkie.com/easy-save-3/es3-api/es3-methods/es3-save/
public static void Save<T>(string key, T value, string filePath, ES3Settings settings)
要注意的一个点,就是存储 以什么形式存放,文档介绍了 (file、Resources、PlayerPrefs、Cache等),我尝试了file,Resources失败了。
File:
首先,默认的文件路径是 Unity的
Application.persistentDataPath:%userprofile%\AppData\LocalLow\<companyname>\<productname>
然后,文件以 “.ES3”结尾, 存储数据以 Json的形式存储。
Resources:
因为不能在 运行状态中 改变Resources中的文件,(但是可以在 Editor 编辑状态下改变),所以我尝试失败了。
建议是,先存在本地, 然后再手动拖到Resources文件下, 不能写,但是可以读。 所以可以制作一些教程呀,啥的存档。
为什么要强调 Resources文件: 因为这是一个特殊的文件,项目导出后,就他包括它的子文件都会原原本本导出来,但其他的文件就没有这样的待遇了。。。
2)Load | LoadInto
可以 加载数据, 或是 预制体。
他会保存 基本的数据, 和 Transform 里的数据。
Load: 会生成一个新的 实例。
LoadInto: 会把存储的数据 导入一个 已经存在的实例。
预制体正文:
官方文档连接: https://docs.moodkie.com/easy-save-3/es3-guides/saving-loading-gameobjects-prefabs/#saving-and-loading-gameobjects
存储和加载预制体,可以使得 预制体包括子物体、组件等全部加载 进去, 但是数据只有上述基本类型的 (Components/MonoBehaviours, 比如Transform)才能存储下来, 而其他组件的数据如果没有单独处理,就默认和预制体里的一样。
1、设置一下存储文件
使用 File,存储的相对路径是 Persistent Data Path,就是上面提到的
Application.persistentDataPath:%userprofile%\AppData\LocalLow\<companyname>\<productname>
可以通过 Tool -》 Open Persistent Data Path,打开该文件夹
2、添加Easy Save3 Manager
菜单栏
Assets -> Easy Save3 -> Add Manage to Scene
3、 Enable Easy Save for Prefab
选中 Prefab,右击 -> Easy Save3 -> Enable Easy Save for Prefab.
进行这个操作, 会添加一个 脚本,允许Easy Save3 来保存这个预制体。
4、添加 Save 和 Load 功能
Save 和 Load 函数 , 建议加上 泛型的 类型
// Save a Prefab.
ES3.Save<GameObject>("myPrefab", obj, filename);
// Load a GameObject, automatically assigning it to an existing
// GameObject if one exists, or create a new GameObject if not.
ES3.Load<GameObject>("myPrefab", defaultGo, filename);
如果是 Load 一个Prefab, 相当于 Instantiate 了一个Prefab,所以它的数据和预制体里的是一样的。
随便写点功能
public int testNum;
void Update()
{
if (Input.GetKeyDown(KeyCode.P))
{
Debug.Log("Save Function");
Save();
}
if (Input.GetKeyDown(KeyCode.O))
{
Debug.Log("Load Function");
Load();
}
}
public void Load()
{
//到 “Ward.es3”文件下 读取 该变量
int num= ES3.Load<int>("wardCount", "Ward.es3");
testNum = num;
Debug.Log("读取到数据 : " + num);
}
public void SaveRoom()
{
//将 public 变量 testNum 存储 到 “Ward.es3”文件下
ES3.Save<int>("wardCount", testNum, "Ward.es3");
}
5、运行测试
1) 运行项目, 按 P (设置的 Save 函数)
2)退出, 到 Open Persistent Data Path 文件夹下,打开 我们设置的 文件 “Ward.es3”
可以看到 存储的 json形式的数据
3)再次运行, 按 O(设置的 Load 函数)
可以在项目里看到, testNum 数值被赋值了。