写在前面
由于工作的关系,需要使用到Easy Save3这个插件,学习期间发现网上略微详细的中文文档并不多,也有搜到几篇详细的日本程序员写的案例教程,代码稍微能看懂干啥,其他的日文完全不懂。基于此,索性我就自己 阅读原文的同时结合我个人浅薄的游戏开发经验理解,对官网的几篇 入门教程 进行了翻译。其实我自己的英文水平也不怎么好,如果有描述错误的地方还请看到这篇文档的大佬们多多包涵和指正,我会真诚的学习并且接受大佬们的建议。最后,希望可以帮助到想入门Easy Save3插件且英文水平和我一样薄弱的同学。如果有一定阅读能力的话还是建议阅读官网文档。
阅读文档:EasySave3官网文档
学习参考:Unity EasySave3中文图文教程详解-万能数据保存插件多平台支持 – Chinar
翻译参考:Getting Started with Easy Save 3 – 絮酱翻译
我的GitHub地址:EasySave3-zh
git clone https://github.com/wankcn/EasySave3-zh.git
原文链接:Getting started
从Asset Store导入Easy Save以后,你可以立即从脚本或者PlayMaker中使用该插件。
关于使用Auto Save来保存和加载无代码的部分,详见自动保存指南 Auto Save guide
有关PlayerMaker操作的信息,详见PlayerMaker操作概述 PlayMaker Actions Overview
Easy Save将数据存储为键和值,很像字典
例如,把一个整数保存到名为“myInt”的键中,并再次加载
ES3.Save("myInt", 123);
myInt = ES3.Load<int>("myInt", defaultValue);
如果没有要加载的数据,它将返回defaultValue
。
如果没有指定默认值defaultValue
,则必须确保有加载的数据。例如,使用 ES3.KeyExists
if(ES3.KeyExists("myInt"))
myInt = ES3.Load<int>("myInt");
把值加载的到现有的引用中,使用 ES3.LoadInto
// 直接将数据加载到Transform中,而不是创建一个新的Transform。
ES3.LoadInto("myTransform", this.transform);
注意,ES3.LoadInto只适用于引用类型,而不适用于基本类型(比如,int,string)或者值类型(structs)
保存和加载类,组件,数据容器的方式与保存加载任何其他数据的方式相同。然而,有一些重要的点需要注意:
类字段保存的条件
UnityEngine.Object 按照引用和值储存
如果类的字段是 UnityEngine.Object,(比如Component, ScriptableObject, Texture2D等等)将通过引用保存
关于无代码自动保存和加载GameObjects的信息,详情参阅 Auto Save guide
如果需要保存和加载GameObjects,场景中必须要有 Easy Save 3 Manager 。如果要将它添加到场景中,需要在Assets中右键选择 Easy Save 3 > Add Manager to Scene。
完成上一步操作后,可以像其他任何对象一样加载和保存GameObjects
// 保存GameObject.
ES3.Save("myGameObject", go);
// 加载游戏对象,将自动加载到现有的游戏对象
// 如果对象不存在,则会创建一个新的游戏对象
ES3.Load("myGameObject", defaultGo);
将保存和加载GameObject的以下内容:
要保存预制件实例,需要进行以下操作:
还可以保存和加载 Arrays, Lists, Dictionaries, Queues, Stacks 和 HashSets 和保存加载其他任何数据类型的方式相同
// Arrays
ES3.Save("myArray", myArray);
myArray = ES3.Load("myArray", defaultValue);
// List
ES3.Save("myList", myList);
myList = ES3.Load("myList", defaultValue);
// Dictionary
ES3.Save("myDictionary", myDictionary);
myDictionary = ES3.Load("myDictionary", defaultValue);
// 2DArray
ES3.Save("my2DArray", my2DArray);
my2DArray = ES3.Load("my2DArray", defaultValue);
// Queue
ES3.Save("myQueue", myQueue);
myQueue = ES3.Load("myQueue", defaultValue);
// HashSet
ES3.Save("myHashSet", myHashSet);
myHashSet = ES3.Load("myHashSet", defaultValue);
// Stack
ES3.Save("myStack", myStack);
myStack = ES3.Load("myStack", defaultValue);
对于大多数项目,在Start()中加载,保存在移动设备的 OnApplicationQuit(), 或者 OnApplicationPause(true)
可以创建Save()和Load()方法,并把它们赋给保存和加载按钮
filePath 参数允许你指定数据的保存位置,如果文件或文件夹不存在,则自动创建该文件或文件夹
该参数可以是文件名、相对路径或绝对路径,有关详细信息,请参阅路径与位置指南 Paths and Locations
// 将值保存到默认位置的文件中
ES3.Save("myKey", myValue, "myFile.es3");
// 使用相对路径将文件保存到默认保存位置的文件夹中
ES3.Save("myKey", myValue, "myFolder/myFile.es3");
// 将值保存到绝对路径的文件中
ES3.Save("myKey", myValue, "C:/Users/User/Documents/myFile.es3);
ES3.DeleteKey 删除一个键
ES3.DeleteKey("myKey", "myFolder/myFile.es3");
ES3.DeleteFile 删除文件
ES3.DeleteFile("myFolder/myFile.es3");
ES3.DeleteDirectory 删除一个目录及其包含的所有文件
ES3.DeleteDirectory("myFolder/");
更改默认设置需要通过顶部菜单 Window > Easy Save 3 > Settings
通过提供ES3Settings对象作为参数,在运行时启用设置,有关详情,请参阅 ES3Settings
Enable encryption 启用加密
var settings = new ES3Settings(ES3.EncryptionType.AES, "myPassword");
ES3.Save("key", data, settings);
ES3.Load("key", data, settings);
Enable compression 启用压缩
var settings = new ES3Settings(ES3.CompressionType.Gzip);
ES3.Save("key", data, settings);
ES3.Load("key", data, settings);
查看支持的类型,详情参阅 Supported Types
与所有代码一样,建议处理错误。使用 try/catch 块以捕获异常,并在必要时向用户发送适当得到消息。比如:
try
{
ES3.Save("key", 123);
ES3.Save("key2", 456);
}
catch(System.IO.IOException)
{
DisplayMessageToUser("The file is open elsewhere or there was not enough storage space");
}
catch(System.Security.SecurityException)
{
DisplayMessageToUser("You do not have the required permissions");
}
有关需要处理错误类型的更多信息,请参阅 Error Handling
原文链接:Auto Save guide
自动保存允许您在GameObject和预制体实例上保存受支持的组件
在 Window>Easy Save 3>Auto Save ,然后按启用此场景的自动保存 Enable Auto Save for this scene
选择要保存在场景中游戏对象上的组件
按下组件旁的齿轮图标,可以选择这个组件需要保存的变量
在自动保存窗口中可以修改 SaveEvent 和 Load Event 的选项
在代码中手动触发时候,建议将 SaveEvent 和 Load Event 设置为 None
// To save
ES3AutoSaveMgr.Current.Save();
// To load
ES3AutoSaveMgr.Current.Load();
ES3AutoSaveMgr.Current.settings.path = "MyFile.es3";