Unity插件 Easy Save 2 (ES2) API引导篇

Basic Saving and Loading 基本的存储和读取

Saving Variables and Components 存储变量和组件

存储变量,请使用

ES2.Save(variable,path)

第一个参数必是需要存储的变量,这个变量必须是ES2可被支持的类型
第二个参数保存数据的存储路径,可以是一个简单的名称,一个文件名,一个文件路径等其他东西

/* Save the value 123 to a key named myInt */
ES2.Save(123,  "myInt");

/* Save this transform to a file named File.txt */
ES2.Save(this.transform,  "File.txt");
Loading Variables 加载变量

你可以使用下面这个方法来加载变量

ES2.Load<Type>(path)

'Type'是需要加载的变量的类型,你需要保证它和存储数据的时候一致
如果你不确定要加载的数据是否存在,你可以使用下面的方法来手动检测数据是否存在

ES2.Exists(path)

/* Check that there is data to load */
if(ES2.Exists("myInt"))

/* Load the int we saved into myInt */
myInt = ES2.Load<int>("myInt");
Loading Components 加载组件

因为Unity是以组件的方式工作的,所以我们应该允许ES插件可以存储和读取我们的组件信息
我们使用这个自动分配的加载方法

ES2.Load(path,component)

/* Load the Transform we saved into the Transform of this object  */
if(ES2.Exists("myTransform"))
    ES2.Load<Transform>("myTransform",this.transform);


Paths 路径

在ES插件中,一个path路径只想一条特定的数据,举个例子,我们告诉ES一个路径让它通过这个路径去存储一些东西,或者去加载一些东西
我们可以增加一些参数在路径的末尾1⃣️做出一些指定设置

******key 键
一个key键标实一条数据,就像使用PlayerPrefs方式一样

ES2.Save(data, "myKey");

******File 文件
如果你想通过指定一个文件的方式去存储一条或者根据Tags标签信息来区别多条数据
如果你仅仅指定一个文件名,那么数据将会存储在ES插件相对的默认位置
你也可能指定一个绝对路径,该路径必须以驱动器盘符或者‘/’或者‘\’ 来开头

// Relative file
ES2.Save(data, "myFile.txt");
// Absolute file
ES2.Save(data, "C:/Users/User/myFile.txt");

******Floder 文件夹
通过指定文件夹的形式来存储数据,你可以使用相对路径或者绝对路径的文件夹路径,同样,你可以使用相对或者绝对文件路径
一个文件夹路径必须是以‘/’ 或者 ‘\’结尾的

// Relative folder
ES2.Exists("myFolder/anotherFolder/");
// Absolute folder
ES2.Exists("C:/Users/User/myFolder/");

******URL 网址
通过ES2Web来使用URL网址的方式存储和加载信息
URL必须是以"http://"或者"https://"开头的

ES2Web web = new ES2Web("http://www.site.com");


Saving and Loading from File 通过文件的方式存储和加载

ES插件允许通过文件的方式存储和加载数据,默认会将文件创建在Application.persistentDataPath路径下,因为这是确保存在的(其他路径的读写关系根据平台有差别),无论如何,你也可以提供别的绝对路径供ES插件去存储和加载
不允许在Unity Web Player的环境下去使用文件存储和加载,所以,在这种情况下即使你给了文件名称或者绝对路径,ES插件也会自动使用PlayerPrefs去替代它

Saving and Loading from File 通过文件的方式存储和加载

通过文件的方式,最简单的方式你可以提供一个文件的路径名。你也可以提供一个文件夹的方式,如果该文件夹不存在则会自动创建
你可以使用任何形式的后缀,只要目标的操作系统允许,我们在例子中大多数使用txt后缀

/* Save the value 123 to a file named myFile.txt */
ES2.Save(123,  "myFile.txt");
 
/* Now load that int back from the file */
int myInt = ES2.Load<int>("myFile.txt");
/* Save myFile.txt inside myFolder */
ES2.Save(123,  "myFolder/myFile.txt");
 
/* And now load it back */
int myInt = ES2.Load<int>("myFolder/myFile.txt");
Using an Absolute Path 使用一个绝对路径

绝对路径必须以驱动器盘符或者‘/’ ‘\’开头,使用正斜杠还/是反斜杠\取决于你的目标操作系统
你必须确定你的绝对路径的位置在运行时是存在的,而且你有写入的权限,我们总是建议只在必要的时候采取使用绝对路径

/* Save our int to an absolute file on Windows */
ES2.Save(123, "C:/Users/User/myFile.txt");
/* Load from an absolute file on OSX */
int myInt = ES2.Load<int>("/Users/User/myFile.txt");


Exists and Delete 存在和删除

Exists 存在

ES2.Exists(path)

检测数据是否存在于给定的路径,这是一个十分有用的方法当你不确定你的数据是否存在的时候
这个方法甚至也可以使用 文件夹 + Tags标签 的形式来检测(针对于一个文件多条信息的情况)

/*If myData exists, load it*/
if(ES2.Exists("myData"))
    myInt = ES2.Load<int>("myData");
/*If myFolder exists, save to it*/
if(ES2.Exists("myFolder/"))
    ES2.Save(123, "myFolder/myFile.txt");
Delete 删除

ES2.Delete(path)

你可以使用上面的方法来删除一条数据,包括文件,文件夹+Tags,应当谨慎使用该方法,因为它会删除即使不是通过ES插件创建的文件和文件夹
提示和建议:我们在创建和读取文件的以后都应该先通过Exists校验,确保操作的文件都是ES相关文件,避免删除和覆盖其他资源文件

/* Delete a key */
ES2.Delete("myInt");
/* Delete a file */
ES2.Delete("myFile.txt");
/* Delete a folder */
ES2.Delete("aFolder/myFolder/");
/* Delete a tag */
ES2.Delete("myFile.txt?tag=myTag");


Parameters 参数

ES插件允许我们在路径中指定参数设置
这是一个类似HTTP Get 请求的格式化字符串,'?'后面的部分表示的是参数,’&‘是参数与参数之间的分割
举个例子,存储数据的时候允许使用加密方式,且设置自己的密码,我们可以使用

ES2.Save(123, "myFile.txt?encrypt=true&password=myPassword");

参数列表

通用参数

  • tag -- 通过tag来标实一个文件中存储的多条数据
  • encrypt -- true / false 来确定数据是否加密
  • password -- 开启加密后的密码
  • savelocation -- 我们希望操作的位置, File,PlayerPrefs或者Resources
  • webusername -- 当我们使用web相关的方法后,在ES2.php中指定的用户名
  • webpassword -- 当我们使用web相关的方法后,在ES2.php中指定的密码
  • webfilename -- 保存到网络时,我们要保存的网络文件

Mesh网格参数

  • savenormals -- 保存Meshs信息是否同时保存normals
  • saveuv -- 保存Meshs信息是否同时保存UVs
  • saveuv2 -- 保存Meshs信息是否同时保存UV2s
  • savetangents -- 保存Meshs信息是否同时保存tangents


Tags: Saving Multiple Variables to One File 标签:在一个文件中保存多条数据

ES插件允许在一个文件中保存多条数据,并通过tags来分别标实对应的数据
如果指定的tag已经存在,那么将会覆盖原来的数据
您可以使用标签将不同类型的数据保存到文件中,并以任意顺序加载。
你可以使用ES2.Delete(path)的方法来删除tags标签,或者删除对应数据文件,那么将会删除这个文件中所有的数据标签

/* Save two different pieces of data to one file */
ES2.Save("myObjectName", "file.txt?tag=nameTag");
ES2.Save(transform, "file.txt?tag=trTag");
 
/* Overwrite a tag with a new value */
ES2.Save("NewName", "file.txt?tag=nameTag");
 
/* Load our data in any order */
ES2.Load<Transform>("file.txt?tag=trTag", transform);
name = ES2.Load<string>("file.txt?tag=nameTag");
 
/* Delete all tags by deleting entire file */
ES2.Delete("file.txt");


Encryption and Obfuscation 加密和混淆

Encryption 加密

ES插件允许你使用AES 128-bit 的方式加密
如果你确定使用它,需要将参数encrypt设置为true,同时你也可以为其设置密码
加密对强化混淆数据是非常有用的,当最终数据的安全性很重要的时候,我们建议您使用HTTPS将数据安全的存储在服务器上,ES插件对此是支持的

/* Save data with encryption */
ES2.Save(123, "file.es?encrypt=true&password=pass");
 
/* Load data with encryption */
int i = ES2.Load<int>("file.es?encrypt=true&password=pass");
Obfuscation 混淆

ES插件为您提供了XOR混淆方式, 这是一种非常快的混淆方式,但是和上面的加密相比,安全性较低
你可以像使用加密的方式来使用它,不过需要额外提供一个参数encryptiontype = obfuscate

/* Save data with encryption */
ES2.Save(123, "file.es?encrypt=true&encryptiontype=obfuscate&password=pass");
 
/* Load data with encryption */
int i = ES2.Load<int>("file.es?encrypt=true&encryptiontype=obfuscate&password=pass");


Saving and Loading from Web 通过Web存储和加载

ES插件允许使用ES提供的PHP文件和MySQL数据库保存到网络上的MySQL服务器
它使用ES自己的格式保存到数据库,无论如何,你可以使用

ES2Web.UploadRaw(string data)
ES2Web.LoadRaw()

来从数据库上传和下载原生字符串

SetUp 安装配置

1.在Assets/Easy Save 2/Web文件夹下找到ES2.php和ES2Sql.sql文件
2.使用ES2SQL.sql文件将ES2表添加到新的或现有的MySQL数据库。记下你添加了表的数据库的名字,因为在稍后的阶段你需要这个名字。
3.打开ES2.php文件,填写ES2表的MySQL数据库主机名,用户名,密码,数据库名
4.同样在ES2.php中,输入在调用ES2Web函数时候将在Unity中使用的用户名和密码
5.将ES2.php文件放到您的Web服务器上,然后该文件的URL输入到Web浏览器中,如果上面的步骤都正确,那么你会看到提示信息"ES2.php and MySQL database are working correctly"

现在你可以在Unity中使用ES2Web了
在使用ES2Web方法前,你需要确定你提供的用户名和密码和在ES2.php中的相同

Save to Web 保存到网络

我们通过使用协程来从网上上传和下载数据,因为这允许我们在多帧中下载,我们建议你先熟悉协程操作在你尝试从web保存和加载数据前
在这个例子中,我们创建一个协程去上传一个Mesh信息到网络上,你可以使用StartCoroutine()方法来启动它
1.首先,我们创建一个 ES2Web 对象,然后填入ES2.php所在服务器的完整路径,我们也可以在URL后提供参数.webfilename是一个重要的参数,它用来指定我们保存在MySQL服务器上的逻辑文件。
2.其他重要参数包括 webusername 和 webpassword,他们和我们在ES2.php中指定的相同,我们也可以使用 tag 和 encrypt 参数
3.现在我们使用 ES2Web.Upload(data)来上传数据
4.最后,我们使用ES2Web.errorCode和ES2Web.error变量来检查ES2Web返回的错误。错误列表可以在ES2Web页面的错误代码部分找到。

public IEnumerator UploadMesh(Mesh mesh, string tag)
{
    // Create a URL and add parameters to the end of it.
    string myURL = "http://www.server.com/ES2.php";
    myURL += "?webfilename=myFile.txt&webusername=user&webpassword=pass";
 
    // Create our ES2Web object.
    ES2Web web = new ES2Web(myURL + "&tag=" + tag);
      
    // Start uploading our data and wait for it to finish.
    yield return StartCoroutine(web.Upload(mesh));
      
    if(web.isError)
    {
        // Enter your own code to handle errors here.
        Debug.LogError(web.errorCode + ":" + web.error);
    }
}
Loading from Web 从服务器加载

在这个例子中我们提供了一条数据让你从服务器加载它,你也可以通过不指定 tag 的方式来下载一整个文件
URL和参数的工作方式与上面的“Save to Web”部分完全相同
1.首先,创建一个 ES2Web 对象并给上URL
2.现在,使用 ES2.Download() 来代替 ES2.Upload() 方法来从服务器上下载数据
3.一旦下载,而且我们已经检查了错误信息,我们可以做下面两件事

  • 1 -- 通过 ES2Web.SaveToFile(path) 保存到本地文件
  • 2 -- 通过 ES2Web.Load(tag) 直接加载下载的数据
public IEnumerator DownloadMesh(string tag)
{
    // Create a URL and add parameters to the end of it.
    string myURL = "http://www.server.com/ES2.php";
    myURL += "?webfilename=myFile.txt&webusername=user&webpassword=pass";
 
    // Create our ES2Web object.
    ES2Web web = new ES2Web(myURL + "&tag=" + tag);
      
    // Start downloading our data and wait for it to finish.
    yield return StartCoroutine(web.Download());
      
    if(web.isError)
    {
        // Enter your own code to handle errors here.
        Debug.LogError(web.errorCode + ":" + web.error);
    }
    else
    {
        // We could save our data to a local file and load from that.
        web.SaveToFile("myFile.txt");
 
        // Or we could just load directly from the ES2Web object.
        this.GetComponent<MeshFilter>().mesh = web.Load<Mesh>(tag);
    }
}
Delete from Web 从Web删除

通过 ES2Web.Delete(path) 方法删除数据,和上传下载方式类似

public IEnumerator DeleteWebFile(string file)
{
    // Create a URL and add parameters to the end of it.
    string myURL = "http://www.server.com/ES2.php";
    myURL += "?webfilename="+file+"&webusername=user&webpassword=pass";
 
    // Create our ES2Web object.
    ES2Web web = new ES2Web(myURL);
      
    // Start downloading our data and wait for it to finish.
    yield return StartCoroutine(web.Delete());
      
    if(web.isError)
    {
        // Enter your own code to handle errors here.
        Debug.LogError(web.errorCode + ":" + web.error);
    }
}
Integrating with a Login System 与登录系统集成

我们强烈建议您将ES2.php集成到您选择的登录系统中
ES2.php文件中包含了一个 Authenticate($uaername,$password)的方法,你可以修改该方法集成到您的登录系统中去
这有两个参数:
username : 即在Unity中指定的webusername
password :即在Unity中指定的webp、Password,默认通过MD5加密了,所以如果你想要在PHP中进行转换请使用 MD5($str) 方法
或者,您可以让ES2以纯文本格式发送密码。为此,请将ES2Web对象的hashType变量设置为ES2Web.HashType.None。但是,不建议您这样做,除非您使用HTTPS。
如果用户名或密码不匹配,则Authenticate方法应该返回false;如果两者匹配,则返回true

Error Codes 错误码

错误码列表
列表,参见Error Codes section of the ES2Web documentation



Saving and Loading from Resources 从Resources保存和加载

Resources 允许包含和加载问价在运行时,包括ES2保存的文件

Saving to Resources 保存到Resources

ES智能保存到编辑器环境下的的Resources文件夹中,因为Build Unity应用程序时候Resources文件夹不存在
如果你想将文件保存到Resources中,以便稍后加载,则任何文件都必须以.bytes为后缀
因为ES2.Save接受一个绝对路径,我们可以使用Application.dataPath来获取我们Assets文件夹的绝对路径,然后通过在path参数的后面追加Resources文件夹路径
或者,您可以将数据保存到您选择的文件夹,然后将其拖到“Resources”文件夹中。
另外请注意,如果您希望在创建文件后立即在Unity中显示文件,则需要调用AssetDatabase.Refresh(),或者从Unity中刷新资源。

ES2.Save(123, Application.dataPath+"/Resources/myFile.bytes?tag=myInt");
AssetDatabase.Refresh();
从Resources加载

要想从Resouces下加载资源,你必须设置你的 Save Location 存储路径为Resources。你可以使用Parameters参数的方式指定,或者使用 ES2Setting 对象
注意,与保存不同,我们不必提供Resources文件夹的路径

// Load from Resources using the savelocation parameter
int myInt = ES2.Load<int>("myFile.bytes?tag=myInt&savelocation=resources");
// Load from Resources using ES2Settings
ES2Settings settings = new ES2Settings();
settings.saveLocation = ES2Settings.SaveLocation.Resources;
 
int myInt = ES2.Load<int>("myFile.bytes?tag=myInt", settings);


Saving and Loading Images 保存和加载图片

您可以使用Easy Save来将JPEG或PNG图像加载为Texture2D。您还可以将Texture2D保存为PNG。

Loading an Image as a Texture2D

您可以使用ES2.LoadImage将JPEG或PNG文件加载为Texture2D。
例如,要将用户硬盘上的JPG加载到GameObject的材质中,可以使用以下代码:

renderer.material.mainTexture = ES2.LoadImage("C:/Users/User/myImage.jpg");
Saving a Texture2D as a PNG

要将Texture2D保存为PNG,请使用ES2.SaveImage方法。
例如,要保存分配给GameObject的材质的Texture2D,可以使用下面的代码:

ES2.SaveImage(renderer.material.mainTexture, "C:/Users/User/MyImage.png");


Loading Audio 加载音频

Easy Save允许您使用ES2.LoadAudio方法将MP3,Ogg,WAV,XM,IT,MOD和S3M文件加载为Unity音频片段。

请注意,您无法在Mac和PC上加载MP3文件,也无法在移动设备上加载Ogg文件。

将一个Ogg音频文件加载到一个AudioSource然后播放它,你可以使用下面的代码:

audio.clip = ES2.LoadAudio("C:/User/Users/myAudio.ogg");
audio.Play();


Faster Saving and Loading using ES2Writer and ES2Reader 通过 ES2WriterES2Reader 更加快速的存储与读取

如果您在保存和加载时需要额外的性能,或者一般情况下需要额外的灵活性,那么我们建议您使用ES2Writer和ES2Reader。这比创建多个ES2.Save和ES2.Load调用要快,因为它使文件在调用之间保持打开状态

Using ES2Writer and ES2Reader with Tags 通过Tags 使用 ES2Writer 和 ES2Reader

与ES2.Save和ES2.Load类似,ES2Writer和ES2Reader可以与标签一起使用。
在开始之前,还应该注意,不应该为同一个文件打开多个ES2Reader或ES2Writers,否则会导致意外的行为。

Saving Tags using ES2Writer 使用 ES2Writer 保存Tags

为了将数据保存到文件,您使用ES2Writer.Create创建一个ES2Writer对象,然后调用它的Write()方法将数据保存到文件中。写完文件后,必须调用写入器的Save方法,将数据存储到文件中。
除非您使用ES2Writer作为Using语句的一部分,否则必须在完成后调用Dispose方法。

using(ES2Writer writer = ES2Writer.Create("myFile.txt"))
{
    // Write our data to the file.
    writer.Write(this.name, "nameTag");
    writer.Write(this.transform, "transformTag");
    writer.Write(new int[]{1,2,3},"intArrayTag");
    // Remember to save when we're done.
    writer.Save();
}
Loading Tags using ES2Reader 使用ES2Reader加载Tags

要从文件加载数据,您需要使用ES2Reader.Create创建一个ES2Reader,然后调用它的Read()方法从文件加载数据。
您也可以使用Self-assigning Read读取方法将数据直接加载到组件中。
除非您使用ES2Reader作为Using语句的一部分,否则必须在完成后调用Reader的Dispose方法。

using(ES2Reader reader = ES2Reader.Create("myFile.txt"))
{
    // Read data from the file in any order.
    reader.Read<Transform>("transformTag", this.transform);
    this.name = reader.Read<string>("nameTag");
    int[] myIntArray = reader.ReadArray<int>("intArrayTag");
}
Using ES2Reader and ES2Writer Sequentially 使用ES2Reader 和 ES2Writer 按顺序进行读写

保存和加载数据的最快方法是按照与保存数据相同的顺序加载数据,而不使用标签。除了我们在保存和加载时没有指定标签之外,这和前面的例子完全一样。
按照保存的顺序加载数据非常重要,否则在运行时会收到错误。
另外请注意,当按顺序保存时,我们使用Save(false)而不是Save()来告诉ES我们没有使用标签。

Saving to a File Sequentially 按顺序保存数据到文件
using(ES2Writer writer = ES2Writer.Create("myFile.txt"))
{
    // Write our data to the file in the order we are going to read it.
    writer.Write(this.name);
    writer.Write(this.transform);
    writer.Write(new int[]{1,2,3});
    // Remember to save when we're done.
    writer.Save(false);
}
按顺序从文件中加载数据

要从文件加载数据,需要使用ES2Reader.Create(path)创建一个ES2Reader,然后调用它的Read()方法从文件加载数据。
按照保存的顺序加载数据非常重要。
您也可以使用Self-assigning Read读取方法将数据直接加载到组件中。
除非您使用ES2Reader作为Using语句的一部分,否则必须在完成后调用Reader的Dispose方法。

using(ES2Reader reader = ES2Reader.Create("myFile.txt"))
{
    // Read the data from the file in the same order as we saved it.
    this.name = reader.Read<string>();
    reader.Read<Transform>(this.transform);
    int[] myIntArray = reader.ReadArray<int>();
}


[Adding Support for Other Types 增加其他支持的类型]

Automatically adding support for a Type 自动添加对类型的支持

您可以尝试通过转到Assets菜单并选择Easy Save 2>Manage Types 来自动添加对类型的支持。然后在类型列表中找到要添加支持的类型,选择要保存的类型的属性,然后按Add Type。

Easy Save可以添加对提供无参数构造函数的类型的支持,并且可以支持以下属性:

  • Public
  • Non-static
  • Allows reading and writing
  • Is currently supported by Esay Save
    对于其他类型,你可能需要手动去添加
Manually adding support for a Type 手动添加支持的类型

如果支持不能自动添加类型,您可能能够手动添加对它的支持。

最简单的方法是创建一个ES2Type模板,方法是转到Assets菜单并选择Easy Save 2> Manage Types,在类型列表中找到您的类型,然后按Add Type。完成后,按编辑类型在默认编辑器中打开类型模板,以便编辑它。

然后,您需要更改写入和读取方法以包含ES2Writer和ES2Reader调用

Adding to the Write method 增加write写入方法

Write方法需要将要从数据变量中保存的数据写入ES2Writer。你可以通过使用writer.Write()调用。

public override void Write(object obj, ES2Writer writer)
{
    MyType data = (MyType)obj;
    // Add your writer.Write calls here.
    writer.Write( data.height );
    writer.Write( data.width );
    writer.Write( data.name );
}
Adding to the Read method 增加read读取方法

Read方法需要按照Write方法中使用reader读取数据的顺序来reader.Read<T>()调用,然后使用该数据构造加载的对象并将其返回。

public override object Read(ES2Reader reader)
{
    float height = reader.Read<float>();
    int width = reader.Read<int>();
    string name = reader.Read<string>();
 
    MyType type = new MyType(height, width, name);
    return data;
}


Viewing and Modifying Files using the File Editor 使用文件编辑器查看和修改文件

由于Easy Save以二进制格式存储数据,因此无法使用普通的文件编辑器对其进行编辑。
但是,您可以使用Easy Save的文件编辑器编辑它们。

打开文件编辑器

在Editor编辑器环境下,转到Assets菜单并选择Easy Save 2>File Editor
要打开文件,只需单击Open File按钮并选择您的文件。
创建一个新文件,只用很简单的点击New File按钮

Using the File Editor 使用文件编辑器

文件编辑器允许您创建文件,删除文件,创建标签,删除标签和修改标签的数据。
窗口左侧的列表显示文件中的所有标签。选择一个查看标签的数据或修改它。
或者,在添加新标签字段中输入标签名称和类型,并将新标签添加到文件中。

Limitations一些局限
  • 它只能查看使用Easy Save标签保存的文件,而不是按顺序写入的数据
  • 只能查看和修改“被支持的类型”列表中的类型。


[Exporting to Spreadsheet and Excel 导出电子表格和Excel]

使用ES2 Spreadsheet,Easy Save可以创建电子表格并以Excel格式,OSX Numbers和OpenOffice等常用电子表格软件支持的CSV格式进行存储。

Using ES2Spreadsheet 使用 ES2Spreadsheet

要创建电子表格,请执行以下操作:
1.创建一个ES2Spreadsheet对象。
2.使用SetCell设置单元格的值。

  • 请注意,列和行号从0开始。
  • 如果值不是字符串,它将使用值的ToString()将其转成字符串表示形式。

3.使用保存将电子表格存储到文件中。

ES2Spreadsheet sheet = new ES2Spreadsheet();
// Add data to cells in the spreadsheet.
for(int col=0; col<10; col++)
    for(int row=0; row<8; row++)
        sheet.SetCell(col, row, "someData");
sheet.Save("mySheet.csv");
Appending rows to a spreadsheet 追加行到点击表格中

如果要将数据附加到现有电子表格,请将电子表格的附加变量设置为true。电子表格中的任何行将被添加到我们保存的行的末尾。

Limitations 一些局限

目前ES2Spreadsheet无法执行以下操作,但可能会在将来执行这些操作:

  • 保存公式。
  • 存储格式或样式信息。
  • 保存多个工作表。


[Auto Save: Code-free Saving and Loading 自动保存,无须代码进行存储和加载]

重要:自动保存目前处于测试阶段,因此某些功能(如保存集合,引用和空引用)被禁用。如果在产品中使用此测试版,请确保在发布之前对其进行彻底测试!在测试版中,我们不提供任何保障
“自动保存”是Unity 5编辑器的可视化脚本编辑工具,可让您在不进行任何编程的情况下保存和加载数据。
它可以用于保存组件,变量,甚至引用预制

Auto Saving Scene Objects 自动保存场景中的物体

开启自动保存场景
1.前往Window > Easy Save 2 > Auto Save >Scene
2.按下"click to enable Auto Save for this scene" 按钮

这将显示可视化脚本工具,它将您的场景层次结构显示在列表中。单击一个对象或变量的名称,它会显示它的实例变量。
旁边的每一个都是一个"保存图标",它允许您告诉自动保存以保存并加载它。点击图标,它将变成高亮显示,表示将自动保存。

Auto Saving Prefabs 自动保存预制

自动保存预制件,请在项目层次结构中右键单击它们,然后选择简易保存2>启用自动保存预制件
然后,您可以使用Prefabs(预制)选项卡下的Auto Save(自动保存)窗口访问这些预制件及其子项。

Auto Save’s Settings 自动保存设置

Auto Save 窗口中的“设置”选项卡允许您选择各种选项。以下是主要选项的简要说明:

When to Load / When to Save 何时加载/何时保存
允许你选择何时保存和加载,这对应于Unity’s Event Functions

  • 我们建议在所有平台上都在Start方法中去加载
  • 在移动平台上在On Application Pause的时候去存储
  • 在所有非移动平台上在On Application Quit的时候去存储。

Filename/Path 文件名/路径
这是一个文件的相对或绝对路径,将被创建来存储我们的自动保存数据。
Tag 标签
一个标签允许我们在一个可能包含许多不同的自动保存数据组的文件中唯一标识这个自动保存数据。
例如,如果您打算将两个不同场景中的不同数据自动保存到同一文件,则应为每个场景使用不同的标签。或者,您可以为每个场景设置不同的文件名。
Manually triggering Auto Save 手动触发自动保存
有时您可能想要使用按钮触发自动保存,或者在您自己的事件中。
只需找到附加到ES2自动保存管理器对象的ES2自动保存管理器脚本,并调用它的Save()和Load()方法。
在代码中获取ES2自动保存管理器最简单的方法如下

ES2AutoSaveManager mgr = GameObject.Find("ES2 Auto Save Manager").GetComponent<ES2AutoSaveManager>();

执行此操作时,可能还需要将设置中的“Save”和“Load”事件设置为“None”,以便只有在手动触发游戏时才会自动保存游戏。
Known Beta Issues 了解测试版存在的问题
有时在退出Unity 5.3.3f1版本时,Auto Save/Prefabs中的选择不会被保存。
Unity的错误。请使用5.3.2f1或更低版本,或等待Unity的修复。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335

推荐阅读更多精彩内容