开始
从资产商店导入Easy Save后,您可以立即从脚本和PlayMaker中使用Easy Save。
有关使用自动保存保存和加载代码的信息,请参阅自动保存指南。
有关PlayMaker可用动作的信息,请参阅PlayMaker动作概述。
如果使用程序集定义,请参阅本页底部附近的程序集定义文件部分。
基本保存和加载
Easy Save将数据存储为键和值,就像字典一样。
要保存值,请使用ES3.Save
要加载值,请使用ES3.Load
例如,要将一个整数保存为一个名为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:
ES3.LoadInto("myTransform", this.transform);
注意ES3.LoadInto只适用于引用类型,而不适用于基本类型(如int、string)或值类型(如structs)。
保存和加载类,组件和scriptableobject
保存和加载类、组件和ScriptableObjects的方式与保存任何其他数据的方式相同。然而,有一些重要的事情需要注意:
- 如果满足以下条件,类的字段将被保存:
- 是公共的,还是有一个[SerializeField]属性
- 不是const或readonly
- 没有[Obsolete]或[NonSerialized]属性
- 是受支持的类型
- UnityEngine。对象类型通过引用和值存储。
- 这意味着如果你正在加载的实例已经存在于场景中,它会将数据加载到该实例中,而不是创建一个新实例。
- 如果类的一个字段是UnityEngine。对象类型(例如Component, ScriptableObject, Texture2D等),它将通过引用保存。
- 这意味着,如果实例不存在于场景中,将不会在加载时创建新的实例,并且该字段将被设置为空。
- 如果你希望按值保存它们,你应该用一个单独的ES3.Save保存调用并在加载引用它们的任何东西之前加载它们。
保存和加载游戏对象和预制件
保存和加载游戏对象和预制件。GameObjects像其他对象一样被保存和加载。以下关于GameObject的信息将被保存:
这将保存并加载GameObject的以下内容:
- 图层,标签,名称和hideFlags。
- 本机支持类型列表中的组件,或者使用ES3Type手动支持的组件。
- 以上所有内容适用于GameObject的每一个子对象。
有关保存和加载预制实例的信息,请参阅保存和加载预制实例指南。
保存和加载集合
你也可以保存和加载数组、列表、字典、队列、堆栈和哈希集,就像你保存和加载任何其他数据一样。
- Array
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);
- 2D Array
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)中保存是有意义的。
您还可以使用按钮来保存和加载。
保存数据存储在哪里
默认情况下保存数据存储在Unity的Application.persistentDataPath,您可以在它们的文档中找到它的位置。您可以在编辑器中打开该路径:工具> Easy Save 3 > open Persistent Data path。
例外是WebGL,它将数据存储到PlayerPrefs,而PlayerPrefs又将数据存储到IndexedDB。
更改文件名或路径
filePath参数允许您指定数据保存的位置。如果该文件或文件夹不存在,系统将自动创建它。
它可以是文件名、相对路径或绝对路径。有关更多信息,请参阅路径和位置指南。
- Filename文件名
ES3.Save("myKey", myValue, "myFile.es3”);
- Relative path相对路径
ES3.Save("myKey", myValue, "myFolder/myFile.es3”);
- Absolute path绝对路径
ES3.Save("myKey", myValue, "C:/Users/User/Documents/myFile.es3);
删除
- Delete a key
ES3.DeleteKey("myKey", "myFolder/myFile.es3”);
- Delete a file
ES3.DeleteFile("myFolder/myFile.es3”);
- Delete a directory
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);
什么可以保存和加载
要查看支持的类型,请参阅支持的类型指南。
错误处理
与所有代码一样,建议您处理错误。这可以使用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");
}
程序集定义文件
您可以通过进入Tools > Easy Save 3 > enable assembly definition files来启用Easy Save的程序集定义文件。
如果您想从程序集访问EasySave3,请将EasySave3 asmdef添加到程序集的asmdef的程序集定义引用列表中。
重要的提示
以下是人们在Unity中保存和加载数据时需要注意的一些重要事项:
- 您应该只保存需要保存和加载的数据。例如,你应该只选择需要保存的组件,而不是保存整个GameObject。
- 不可能加载对不再存在的东西的引用。例如,如果你在运行时创建一个对象,当你退出场景或退出应用程序时,具有此引用ID的对象将不再存在。有关如何处理此问题的信息,请参阅保存和加载引用指南。
- 有些组件(如playercontroller或AI控制器)可能会缓存对象的位置,这意味着保存和加载对象的Transform不会对对象的位置产生任何影响。在这种情况下,可能需要在加载之前禁用控制位置的组件,并在加载后重新启用它。
Further Reading
- Guides
- Feature Overview
- Scripting API
- Saving and Loading GameObjects and Prefabs
- Settings, Paths and Locations
- Choosing what is saved
- Saving and Loading References
使用案例