Easy Save 2 说明文档简单翻译(四)

0

Saving and Loading PNG and JPG Images

你可以使用EasySave为Texture2D加载一张JPEG,PNG图片,也可以保存Texture2D为PNG图片。

Loading an Image as a Texture2D

你可以通过使用ES2.LoadImage来为Texture2D加载JPEG或PNG。

例如,从用于的硬盘中加载一张JPG到GameObject的material中,可以使用一下代码:

   1: renderer.material.mainTexture = ES2.LoadImage("C:/Users/User/myImage.jpg");

Saving a Texture2D as a PNG

保存Texture2D为PNG,使用ES2.SaveImage函数

例如,保存GameObject material的texture:

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

 

 

Loading An Audio File As An AudioClip

EasySave允许加载 MP3,Ogg, WAV,XM,IT,MOD,S3M格式的文件称为Unity的AudioClips,使用ES2.LoadAudio函数。

注意你不能在Mac与PC上加载MP3文件,也不能在移动设备上加载Ogg文件。

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

   2: audio.Play();

 

 

Faster Saving and Loading using ES2Writer and ES2Reader

如果需要保存与加载额外的执行效率,或额外的灵活性,那么我们建议你使用 ES2Writer与ES2Reader.

这个比起多次调用ES2.Save与ES2.Load有更快的速度。

Using ES2Writer and ES2Reader with Tags

和save,load一样,writer与reader同样可以使用tags.

在开始之前,你需要注意你不可以使用reader或writer打开同一个文件多次,否则会有意外的行为发生。

Saving to a File using Tags

要保存数据到文件,你需要通过ES2Writer.Creater创建ES2Writer并调用Write函数来保存数据到文件。当你结束保存文件,你必须调用writer的Save函数来保存数据。

除非你使用的是Using语法,否则你必须调用writer的Dispose函数,当你结束的时候。

   1: using(ES2Writer writer = ES2Writer.Create("myFile.txt"))

   2: {

   3:     // Write our data to the file.

   4:     writer.Write(this.name, "nameTag");

   5:     writer.Write(this.transform, "transformTag");

   6:     writer.Write(newint[]{1,2,3},"intArrayTag");

   7:     // Remember to save when we're done.

   8:     writer.Save();

   9: }

Loading From a File using Tags

使用ES2Reader.Create创建一个ES2Reader,并调用Read函数来从文件中读取数据。

你也可以使用Self-assigning Read函数来直接加载组件。

除非你使用using语法,否则最后要调用Dispose函数。

   1: using(ES2Reader reader = ES2Reader.Create("myFile.txt"))

   2: {

   3:     // Read data from the file in any order.

   4:     reader.Read<Transform>("transformTag", this.transform);

   5:     this.name = reader.Read<string>("nameTag");

   6:     int[] myIntArray = reader.ReadArray<int>("intArrayTag");

   7: }

Using ES2Writer and ES2Reader Sequentially

最快的加载数据方式就是按你保存时的顺序加载,不适用tags.前面的例子中,如果当保存或加载不适用tag就是这里的快速了。

按照你保存时的顺序读取数据,这是非常重要的,否则你会得到一个运行时错误。

同时也要注意当你连续保存时,我们使用 Save(false)来代替Save()用来告诉EasySave不使用Tag。

Saving to a file Sequentially

   1: using(ES2Writer writer = ES2Writer.Create("myFile.txt"))

   2: {

   3:     // Write our data to the file in the order we are going to read it.

   4:     writer.Write(this.name);

   5:     writer.Write(this.transform);

   6:     writer.Write(newint[]{1,2,3});

   7:     // Remember to save when we're done.

   8:     writer.Save(false);

   9: }

Loading from a File Sequentially

用ES2Reader.Create(filepath)创建ES2Reader并调用其Read(data)来加载文件中的数据。

   1: using(ES2Reader reader = ES2Reader.Create("myFile.txt"))

   2: {

   3:     // Read the data from the file in the same order as we saved it.

   4:     this.name = reader.Read<string>();

   5:     reader.Read<Transform>(this.transform);

   6:     int[] myIntArray = reader.ReadArray<int>();

   7: }

Easy Save 2 说明文档简单翻译(三)

0

Encryption

EasySave给与你使用 AES 128-bit的加密能力。

要启用它,你需要设置encrypt参数为true,同时也可以设置加密密码。

加密is good for 混淆(obfuscation).However, when ultimate security is important we advise you instead store data on a secure server using HTTPS, which is supported by Easy Save.

   1: /* Save data with encryption */

   2: ES2.Save(123, "file.es?encrypt=true&password=pass");

   3: /* Load data with encryption */

   4: inti = ES2.Load<int>("file.es?encrypt=true&password=pass");

 

 

Saving and Loading From Web

EasySave允许你使用WEB PHP文件保存数据到MySQL,数据库由EasySave提供。

他保存到数据库使用EasySave自己的格式,你可以使用ES2Web.UploadRaw(string data)和ES2Web.LoadRaw()来上传于下载数据,从数据库中。

Web Setup

1. 从 Assets/Plugins/Easy Save 2/Web文件夹中找到ES2.php,ES2SQL.sql文件。

clipboard

2. 在一个MySQL中使用ES2SQL.sql文件。记住这个表的名称,待会你会用到。

clipboard[1]

注意:示意图只是显示你怎么使用PHPMyAdmin控制面板来插入表,并不是一定要用这中方式。

3. 打开ES2.php,修改其中的标记信息:hostnam,usernam,password,database name,

clipboard[2]

4. 也在这个文件中输入username与password, 在Unity中调用ES2Web功能时需要使用

clipboard[3]

5. 将这个文件放到你的web服务器,并进入这个网址,如果成功你会看到信息:

ES2.php and MySQL database are working correctly

6. 现在你可以在Unity中使用ES2Web了。

确定在使用ES2Web功能时,你提供的username password与ES2PHP中的一致。

    Saving to Web

我们使用协同来上传于下载, 这就允许我们使用多帧来下载数据。连我们建议熟悉下协同在尝试保存于下载web数据之前。

这个例子中,我们创建一个协同上传一个Mesh到web:

1. 首先,创建ES2Web对象,使用到ES2.php的URL作为path.在URL中我们也可以提供参数。一个重要的参数就是webfilename,这个决定了在我们MySQL服务器中的逻辑文件。

2. 另一个重要参数是webusername,webpassword,这两个就是在ES2PHP中的username,password.同时我们还可以使用tag与encrypt参数。

3. 现在我们yield ES2Web.Upload(data)来上传我们的数据。

4. 最后,我们通过ES2Web.errorcode与ES2Web.error检测是否有返回错误。下面会有错误列表。

   1: public IEnumerator UploadMesh(Meshmesh,stringtag)

   2: {

   3:     // Create a URL and add parameters to the end of it.

   4:     stringmyURL = "http://www.server.com/ES2.php";

   5:     myURL += "?webfilename=myFile.txt&webusername=user&webpassword=pass";

   6:     // Create our ES2Web object.

   7:     ES2Webweb = newES2Web(myURL + "&tag="+ tag);

   8:     // Start uploading our data and wait for it to finish.

   9:     yieldreturnStartCoroutine(web.Upload(mesh));

  10:  

  11:     if(web.isError)

  12:     {

  13:         // Enter your own code to handle errors here.

  14:         Debug.LogError(web.errorCode + ":"+ web.error);

  15:     }

  16: }

    Loading From Web

这个例子中我们从web下载一条数据,你也可以下载整个文件(只要不指定tag参数即可)

1. 首先,创建ES2Web 对象

2. yield ES2.Download().

3. 一旦下载完成,我们需要检查错误,

    1. 保存数据到本地文件使用ES2Web.SaveToFile(path)

    2. 直接从下载的数据中加载ES2Web.Load(tag),或其他load函数(看API)

   1: public IEnumerator DownloadMesh(stringtag)

   2: {

   3:     // Create a URL and add parameters to the end of it.

   4:     stringmyURL = "http://www.server.com/ES2.php";

   5:     myURL += "?webfilename=myFile.txt&webusername=user&webpassword=pass";

   6:     // Create our ES2Web object.

   7:     ES2Webweb = newES2Web(myURL + "&tag="+ tag);

   8:  

   9:     // Start downloading our data and wait for it to finish.

  10:     yieldreturnStartCoroutine(web.Download());

  11:  

  12:     if(web.isError)

  13:     {

  14:         // Enter your own code to handle errors here.

  15:         Debug.LogError(web.errorCode + ":"+ web.error);

  16:     }

  17:     else

  18:     {

  19:         // We could save our data to a local file and load from that.    

  20:         web.SaveToFile("myFile.txt");

  21:         // Or we could just load directly from the ES2Web object.

  22:         this.GetComponent<MeshFilter>().mesh = web.Load<Mesh>(tag);

  23:     }

  24: }

    Delete from Web

使用ES2Web.Delete(path)来删除数据,其他步骤通上面的一样

   1: public IEnumerator DeleteWebFile(stringfile)

   2: {

   3:     // Create a URL and add parameters to the end of it.

   4:     stringmyURL = "http://www.server.com/ES2.php";

   5:     myURL += "?webfilename="+file+"&webusername=user&webpassword=pass";

   6:     // Create our ES2Web object.

   7:     ES2Webweb = newES2Web(myURL);

   8:  

   9:     // Start downloading our data and wait for it to finish.

  10:     yieldreturnStartCoroutine(web.Delete());

  11:  

  12:     if(web.isError)

  13:     {

  14:         // Enter your own code to handle errors here.

  15:         Debug.LogError(web.errorCode + ":"+ web.error);

  16:     }

  17: }

    integrating with a login system(整合一个登陆系统)

ES2.php文件中包含一个 Authenticate($username,$password)方法,用来验证你的登陆。

username is the webusername specified in Unity.

password is the webPassword specified in Unity. By default Easy Save 2 sends the password as an MD5 hash, so you may need to convert your password to an MD5 hash using PHP’sMD5($str) method.

Alternatively you can get ES2 to send your password in plain text. To do this, set thehashType variable of your ES2Web objects to ES2Web.HashType.None. However, it is not advised that you do this unless you are using HTTPS.

The Authenticate method should return false if either the username or password do not match, or true if they both match.

    Error Codes

“00”

Unity有一个上传错误。可能是因为URL不存在,或Server关闭了。

“01”

不能连接到数据库,或数据库登陆错误

“02”

username,password与ES2.php中的不一致

’03”

ES2.php中没有数据接收到

“04”

数据库中找不到ES2相关的表

“05”

你要下载的数据根本不存在

 

 

Saving and Loading from Resources

Unity的Resources文件夹允许你在加载其中的文件,包括EasySave2的保存文件。

Saving to Resources

只有在Editor状态的时候EasySave才可以保存到Resources.如果没有这个文件夹就创建一个。

如果你想要保存数据到Resources并在之后的运行中使用它们,所有文件都必须以 .bytes 后缀。

因为ES2.Save允许一个绝对路径,我们可以使用Application.dataPath来获取我们Assets文件夹的绝对路径,从而可以获取Resources文件夹路径。

或你直接将文件拖到Resources中。

   1: ES2.Save(123, Application.dataPath+"/Resources/myFile.bytes?tag=myInt");

Loading From Resources

要从Resources中加载数据,你需要设置你的保存位置为Resources,你可以通过使用参数来设置,或通过使用ES2Settings对象。

注意不同于保存,,我们不需要提供Resources文件夹的路径。

   1: // Load from Resources using the savelocation parameter

   2: intmyInt = ES2.Load<int>("myFile.bytes?tag=myInt&savelocation=resources");

   3: // Load from Resources using ES2Settings

   4: ES2Settingssettings = newES2Settings();

   5: settings.location = ES2Settings.SaveLocation.Resources;

   6: intmyInt = ES2.Load<int>("myFile.bytes?tag=myInt", settings);

Easy Save 2 说明文档简单翻译(二)

0

Saving and Loading from File(保存或加载文件)

EasySave允许你保存或加载文件。文件将被默认创建在 Application.persistentDataPath中,这个是保证存在的。你也可以指定任何的绝对路径,只要这个路径可用。

你不可以为Unity Web玩家保存到文件,EasySave将自动保存到PlayerPrefs,即使你给了一个文件名或绝对路径。

Saving and Loading from File

首先,要提供一个文件名作为path参数,你也可以指定一个文件夹,如果不存在将会自动创建。

你可以使用任何扩展名的文件,只要目标操作系统允许。通常我们使用”.txt”

   1: /* Save the value 123 to a file named myFile.txt */

   2: ES2.Save(123,  "myFile.txt");

   3: /* Now load that int back from the file */

   4: intmyInt = ES2.Load<int>("myFile.txt");

   5: /* Save myFile.txt inside myFolder */

   6: ES2.Save(123,  "myFolder/myFile.txt");

   7: /* And now load it back */

   8: intmyInt = ES2.Load<int>("myFolder/myFile.txt");

使用绝对路径

一个绝对路径必须以盘符或slash开始,/或\都可以,基于你的目标平台系统。

你必须确定这个路径在runtime时是存在的,并且你有权限可以在这个位置写数据。我们建议你只在必要的时候使用绝对路径。

   1: /* Save our int to an absolute file on Windows */

   2: ES2.Save(123, "C:/Users/User/myFile.txt");

   3: /* Load from an absolute file on OSX */

   4: intmyInt = ES2.Load<int>("/Users/User/myFile.txt");

 

 

Exists and Delete(判断存在与删除)

Exists

ES2.Exists(path) 检测给与的path的数据是否存在。这个特别适用于你不太确定数据是否存在的时候。

这个函数也可以用于文件夹与tags

   1: /*If myData exists, load it*/

   2: if(ES2.Exists("myData"))

   3: myInt = 

   4: ES2.Load<int>("myData");

   5: /*If myFolder exists, save to it*/

   6: if(ES2.Exists("myFolder/"))

   7: ES2.Save(123, 

   8: "myFolder/myFile.txt");

Delete

ES2.Delete(path)被用来删除数据,包括文件,文件夹,tags.

你必须小心使用它,因为他甚至可以删除非EasySave创建的文件或文件夹。

   1: /* Delete a key */

   2: ES2.Delete("myInt");

   3: /* Delete a file */

   4: ES2.Delete("myFile.txt");

   5: /* Delete myFolder */

   6: ES2.Delete("aFolder/myFolder/");

   7: /* Delete a tag */

   8: ES2.Delete("myFile.txt?tag=myTag");

 

 

Parameters

参数允许我们设置EasySave的path.

它的格式类似于HTTP的查询字符串,?表示开始解析参数,用&来分开每个参数。

比如,要启用加密并设置加密的密码,我们可以轻易的将参数增加到path的末尾:

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

参数列表


一般参数

tag

允许你在同一个文件中保存多条数据,使用tag来区分这多条数据。
例子:myFile.txt?tag=MyData

encrypt

启用加密操作

例子:myFile.txt?encrypt=true&password=myPassword

password 使用加密时使用的密码
savelocation

我们想要在哪里执行操作,文件,PlayerPrefs或Resources

例子:myFile.txt?savelocation=file

webusernam

当使用web 功能时为ES2.php提供用户名称。

例子:http://www.mysite.com/ES2.php?webusername=MyUsername&webpassword=MyPassword

webpassword 同上,密码。
webfilename

我们想要保存到web的文件名称

例子:http://www.mysite.com/ES2.php?webfilename=MyFile.txt

Mesh参数

savenormals

保存mesh的时候是否保存normal

例子:myFile.txt?savenormals=false

saveuv

是否保存UV
例子:myFile.txt?saveuv=true

saveuv2 是否保存UV2
savetangents 是否保存切线tangent

 

 

Saving Multiple Variables to One File using Tags

EasySave允许你想一个文件中保存多条数据,使用tags来区分。

如果使用已经存在的tag则会覆盖原来的这条数据。

你可以在一个文件中使用tag保存不同类型的数据,并使用任意的顺序加载。

你可以使用ES2.Delete(path)来删除tag,或删除删除文件来删除所有的tags

   1: /* Save two different pieces of data to one file */

   2: ES2.Save("myObjectName", 

   3: "file.txt?tag=nameTag");

   4: ES2.Save(transform, 

   5: "file.txt?tag=trTag");

   6: /* Overwrite a tag with a new value */

   7: ES2.Save("NewName", 

   8: "file.txt?tag=nameTag");

   9: /* Load our data in any order */

  10: ES2.Load<Transform>("file.txt?tag=trTag", 

  11: transform);

  12: name = 

  13: ES2.Load<string>("file.txt?tag=nameTag");

  14: /* Delete all tags by deleting entire file */

  15: ES2.Delete("file.txt");

Easy Save 2 说明文档简单翻译(一)

0

这个也是很强大的插件,内容也挺简单的其实。到其官方网站上都能找到教程,所以还是为了防止自己一段时间不用忘掉了,所以翻译了一下,做个备份。

 

Supported Types(支持保存的类型)

Primitive Types

  • string
  • float
  • byte
  • bool
  • char
  • int
  • long
  • short
  • uint
  • ulong
  • ushort

Unity Types

  • Vector2
  • Vector3
  • Vector4
  • Quaternion
  • Color
  • Color
  • Texture2D
  • Material
  • Mesh
  • AudioClip
  • Rect
  • Bounds

Collections

  • Array [ ]
  • 2D Array [,]
  • Dictionary<TKey, TValue>
  • List<T>
  • Queue<T>
  • HashSet<T>
  • Stack<T>

Note: Saving collections containing collections is not directly supported

Components

  • Transform
  • SphereCollider
  • BoxCollider
  • CapsuleCollider
  • MeshCollider

Note: All Components are saved by value, not by reference.

 

Basic Saving and Loading(基本的保存与载入)

保存变量与组件

要保存变量,我们使用 ES2.Save(variable, path).

第一个参数是我们想要保存的变量,而且其类型必须符合支持的类型。

第二个参数是一个path,用来作为id。可以是一个简单的名称、文件名、文件路径或其他什么。

   1: /* Save the value 123 to a key named myInt */

   2:  

   3: ES2.Save(123,  "myInt");

   4:  

   5: /* Save this transform to a file named File.txt */

   6:  

   7: ES2.Save(this.transform,  "File.txt");

加载变量

要加载变量,使用 ES2.Load<Type>(path). ‘Type”是你要加载的变量的类型,path必须是你保存时使用的path.

如果你不确定数据是否存在,你可以使用 ES2.Exists(path)来检测:

   1: /* Load the int we saved into myInt */

   2:  

   3: myInt = ES2.Load<int>("myInt");

   4:  

   5: /* Check that there is data to load */

   6:  

   7: if(ES2.Exists("myInt"))

   8:  

   9: /* Load the int we saved into myInt */

  10:  

  11: myInt = ES2.Load<int>("myInt");

加载组件

因为组件是unity中工作的,所以我们必须提供增加次组件的数据

使用 ES2.Load(path, component)

   1: /* 

   2: 

   3: Load the Transform we saved 

   4: 

   5: into the Transform of this object 

   6: 

   7: */ 

   8:  

   9: ES2.Load<Transform>("File.txt", this.transform);

 

Paths(路径)

在EasySave中,路经典详细描述了数据。比如,我们可能使用一个路径来告诉EasySave我们保存的是什么数据,以及从那里加载数据。

我们也可以增加 参数 在路径的后面来指定设置。

Types of Path


Key

用key作为path id保存一条数据,和使用PlayerPrefs是一样的效果:

   1: ES2.Save(data, "myKey");

File

这个指定了一个文件,你可以保存一条数据,也可以使用它Tags来保存多条数据。

如果你指定了一个文件名,这个文件路径将相对于EasySave的默认路径 relative.

你也可以指定绝对路径,在windows中必须从驱动盘符开始(比如C:/)或一个slash(/或\)

   1: // Relative file

   2:  

   3: ES2.Save(data, "myFile.txt");

   4:  

   5: // Absolute file

   6:  

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

   8:  

Folder

这个指定了一个文件夹。你可以使用相对或绝对路径。

一个文件夹路径必须以splash结尾。

   1: // Relative folder

   2:  

   3: ES2.Exists("myFolder/anotherFolder/");

   4:  

   5: // Absolute folder 这个没有splash,是不是错了我擦

   6:  

   7: ES2.Exists("C:/Users/User/myFolder");

   8:  

URL

一个URL被用于当保存或加载数据从web使用ES2Web的时候。

一个URL路径必须以http:// 或 https:// 开头

   1: ES2Webweb = newES2Web("http://www.site.com");