Basic Saving and Loading 基本的存儲和讀取
Saving Variables and Components 存儲變量和組件
存儲變量梯影,請使用
ES2.Save(variable,path)
第一個參數(shù)必是需要存儲的變量眨攘,這個變量必須是ES2可被支持的類型
第二個參數(shù)保存數(shù)據(jù)的存儲路徑红氯,可以是一個簡單的名稱侍郭,一個文件名莹捡,一個文件路徑等其他東西
/* 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'是需要加載的變量的類型纲刀,你需要保證它和存儲數(shù)據(jù)的時候一致
如果你不確定要加載的數(shù)據(jù)是否存在雅潭,你可以使用下面的方法來手動檢測數(shù)據(jù)是否存在
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是以組件的方式工作的罐盔,所以我們應(yīng)該允許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路徑只想一條特定的數(shù)據(jù),舉個例子惶看,我們告訴ES一個路徑讓它通過這個路徑去存儲一些東西捏顺,或者去加載一些東西
我們可以增加一些參數(shù)在路徑的末尾1??做出一些指定設(shè)置
******key 鍵
一個key鍵標(biāo)實一條數(shù)據(jù),就像使用PlayerPrefs方式一樣
ES2.Save(data, "myKey");
******File 文件
如果你想通過指定一個文件的方式去存儲一條或者根據(jù)Tags標(biāo)簽信息來區(qū)別多條數(shù)據(jù)
如果你僅僅指定一個文件名纬黎,那么數(shù)據(jù)將會存儲在ES插件相對的默認(rèn)位置
你也可能指定一個絕對路徑幅骄,該路徑必須以驅(qū)動器盤符或者‘/’或者‘\’ 來開頭
// Relative file
ES2.Save(data, "myFile.txt");
// Absolute file
ES2.Save(data, "C:/Users/User/myFile.txt");
******Floder 文件夾
通過指定文件夾的形式來存儲數(shù)據(jù),你可以使用相對路徑或者絕對路徑的文件夾路徑本今,同樣拆座,你可以使用相對或者絕對文件路徑
一個文件夾路徑必須是以‘/’ 或者 ‘\’結(jié)尾的
// Relative folder
ES2.Exists("myFolder/anotherFolder/");
// Absolute folder
ES2.Exists("C:/Users/User/myFolder/");
******URL 網(wǎng)址
通過ES2Web來使用URL網(wǎng)址的方式存儲和加載信息
URL必須是以"http://"或者"https://"開頭的
ES2Web web = new ES2Web("http://www.site.com");
Saving and Loading from File 通過文件的方式存儲和加載
ES插件允許通過文件的方式存儲和加載數(shù)據(jù),默認(rèn)會將文件創(chuàng)建在Application.persistentDataPath路徑下冠息,因為這是確保存在的(其他路徑的讀寫關(guān)系根據(jù)平臺有差別)挪凑,無論如何,你也可以提供別的絕對路徑供ES插件去存儲和加載
不允許在Unity Web Player的環(huán)境下去使用文件存儲和加載铐达,所以岖赋,在這種情況下即使你給了文件名稱或者絕對路徑,ES插件也會自動使用PlayerPrefs去替代它
Saving and Loading from File 通過文件的方式存儲和加載
通過文件的方式瓮孙,最簡單的方式你可以提供一個文件的路徑名唐断。你也可以提供一個文件夾的方式,如果該文件夾不存在則會自動創(chuàng)建
你可以使用任何形式的后綴杭抠,只要目標(biāo)的操作系統(tǒng)允許脸甘,我們在例子中大多數(shù)使用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 使用一個絕對路徑
絕對路徑必須以驅(qū)動器盤符或者‘/’ ‘\’開頭,使用正斜杠還/是反斜杠\取決于你的目標(biāo)操作系統(tǒng)
你必須確定你的絕對路徑的位置在運行時是存在的偏灿,而且你有寫入的權(quán)限丹诀,我們總是建議只在必要的時候采取使用絕對路徑
/* 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)
檢測數(shù)據(jù)是否存在于給定的路徑,這是一個十分有用的方法當(dāng)你不確定你的數(shù)據(jù)是否存在的時候
這個方法甚至也可以使用 文件夾 + Tags標(biāo)簽 的形式來檢測(針對于一個文件多條信息的情況)
/*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)
你可以使用上面的方法來刪除一條數(shù)據(jù),包括文件铆遭,文件夾+Tags硝桩,應(yīng)當(dāng)謹(jǐn)慎使用該方法,因為它會刪除即使不是通過ES插件創(chuàng)建的文件和文件夾
提示和建議:我們在創(chuàng)建和讀取文件的以后都應(yīng)該先通過Exists校驗枚荣,確保操作的文件都是ES相關(guān)文件碗脊,避免刪除和覆蓋其他資源文件
/* 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 參數(shù)
ES插件允許我們在路徑中指定參數(shù)設(shè)置
這是一個類似HTTP Get 請求的格式化字符串,'?'后面的部分表示的是參數(shù),’&‘是參數(shù)與參數(shù)之間的分割
舉個例子,存儲數(shù)據(jù)的時候允許使用加密方式橄妆,且設(shè)置自己的密碼衙伶,我們可以使用
ES2.Save(123, "myFile.txt?encrypt=true&password=myPassword");
參數(shù)列表
通用參數(shù)
- tag -- 通過tag來標(biāo)實一個文件中存儲的多條數(shù)據(jù)
- encrypt -- true / false 來確定數(shù)據(jù)是否加密
- password -- 開啟加密后的密碼
- savelocation -- 我們希望操作的位置, File害碾,PlayerPrefs或者Resources
- webusername -- 當(dāng)我們使用web相關(guān)的方法后,在ES2.php中指定的用戶名
- webpassword -- 當(dāng)我們使用web相關(guān)的方法后,在ES2.php中指定的密碼
- webfilename -- 保存到網(wǎng)絡(luò)時矢劲,我們要保存的網(wǎng)絡(luò)文件
Mesh網(wǎng)格參數(shù)
- savenormals -- 保存Meshs信息是否同時保存normals
- saveuv -- 保存Meshs信息是否同時保存UVs
- saveuv2 -- 保存Meshs信息是否同時保存UV2s
- savetangents -- 保存Meshs信息是否同時保存tangents
Tags: Saving Multiple Variables to One File 標(biāo)簽:在一個文件中保存多條數(shù)據(jù)
ES插件允許在一個文件中保存多條數(shù)據(jù),并通過tags來分別標(biāo)實對應(yīng)的數(shù)據(jù)
如果指定的tag已經(jīng)存在慌随,那么將會覆蓋原來的數(shù)據(jù)
您可以使用標(biāo)簽將不同類型的數(shù)據(jù)保存到文件中芬沉,并以任意順序加載。
你可以使用ES2.Delete(path)的方法來刪除tags標(biāo)簽儒陨,或者刪除對應(yīng)數(shù)據(jù)文件花嘶,那么將會刪除這個文件中所有的數(shù)據(jù)標(biāo)簽
/* 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 的方式加密
如果你確定使用它,需要將參數(shù)encrypt設(shè)置為true蹦漠,同時你也可以為其設(shè)置密碼
加密對強化混淆數(shù)據(jù)是非常有用的,當(dāng)最終數(shù)據(jù)的安全性很重要的時候,我們建議您使用HTTPS將數(shù)據(jù)安全的存儲在服務(wù)器上,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混淆方式车海, 這是一種非车言埃快的混淆方式,但是和上面的加密相比侍芝,安全性較低
你可以像使用加密的方式來使用它研铆,不過需要額外提供一個參數(shù)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數(shù)據(jù)庫保存到網(wǎng)絡(luò)上的MySQL服務(wù)器
它使用ES自己的格式保存到數(shù)據(jù)庫,無論如何州叠,你可以使用
ES2Web.UploadRaw(string data)
ES2Web.LoadRaw()
來從數(shù)據(jù)庫上傳和下載原生字符串
SetUp 安裝配置
1.在Assets/Easy Save 2/Web文件夾下找到ES2.php和ES2Sql.sql文件
2.使用ES2SQL.sql文件將ES2表添加到新的或現(xiàn)有的MySQL數(shù)據(jù)庫棵红。記下你添加了表的數(shù)據(jù)庫的名字,因為在稍后的階段你需要這個名字咧栗。
3.打開ES2.php文件逆甜,填寫ES2表的MySQL數(shù)據(jù)庫主機名,用戶名致板,密碼交煞,數(shù)據(jù)庫名
4.同樣在ES2.php中,輸入在調(diào)用ES2Web函數(shù)時候?qū)⒃赨nity中使用的用戶名和密碼
5.將ES2.php文件放到您的Web服務(wù)器上斟或,然后該文件的URL輸入到Web瀏覽器中素征,如果上面的步驟都正確,那么你會看到提示信息"ES2.php and MySQL database are working correctly"
現(xiàn)在你可以在Unity中使用ES2Web了
在使用ES2Web方法前,你需要確定你提供的用戶名和密碼和在ES2.php中的相同
Save to Web 保存到網(wǎng)絡(luò)
我們通過使用協(xié)程來從網(wǎng)上上傳和下載數(shù)據(jù)御毅,因為這允許我們在多幀中下載根欧,我們建議你先熟悉協(xié)程操作在你嘗試從web保存和加載數(shù)據(jù)前
在這個例子中,我們創(chuàng)建一個協(xié)程去上傳一個Mesh信息到網(wǎng)絡(luò)上端蛆,你可以使用StartCoroutine()方法來啟動它
1.首先,我們創(chuàng)建一個 ES2Web 對象凤粗,然后填入ES2.php所在服務(wù)器的完整路徑,我們也可以在URL后提供參數(shù).webfilename是一個重要的參數(shù),它用來指定我們保存在MySQL服務(wù)器上的邏輯文件欺税。
2.其他重要參數(shù)包括 webusername 和 webpassword侈沪,他們和我們在ES2.php中指定的相同,我們也可以使用 tag 和 encrypt 參數(shù)
3.現(xiàn)在我們使用 ES2Web.Upload(data)來上傳數(shù)據(jù)
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 從服務(wù)器加載
在這個例子中我們提供了一條數(shù)據(jù)讓你從服務(wù)器加載它歼秽,你也可以通過不指定 tag 的方式來下載一整個文件
URL和參數(shù)的工作方式與上面的“Save to Web”部分完全相同
1.首先应役,創(chuàng)建一個 ES2Web 對象并給上URL
2.現(xiàn)在,使用 ES2.Download() 來代替 ES2.Upload() 方法來從服務(wù)器上下載數(shù)據(jù)
3.一旦下載燥筷,而且我們已經(jīng)檢查了錯誤信息箩祥,我們可以做下面兩件事
- 1 -- 通過 ES2Web.SaveToFile(path) 保存到本地文件
- 2 -- 通過 ES2Web.Load(tag) 直接加載下載的數(shù)據(jù)
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) 方法刪除數(shù)據(jù),和上傳下載方式類似
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 與登錄系統(tǒng)集成
我們強烈建議您將ES2.php集成到您選擇的登錄系統(tǒng)中
ES2.php文件中包含了一個 Authenticate($uaername,$password)的方法肆氓,你可以修改該方法集成到您的登錄系統(tǒng)中去
這有兩個參數(shù):
username : 即在Unity中指定的webusername
password :即在Unity中指定的webp袍祖、Password,默認(rèn)通過MD5加密了谢揪,所以如果你想要在PHP中進行轉(zhuǎn)換請使用 MD5($str) 方法
或者蕉陋,您可以讓ES2以純文本格式發(fā)送密碼。為此拨扶,請將ES2Web對象的hashType變量設(shè)置為ES2Web.HashType.None凳鬓。但是,不建議您這樣做患民,除非您使用HTTPS缩举。
如果用戶名或密碼不匹配,則Authenticate方法應(yīng)該返回false;如果兩者匹配匹颤,則返回true
Error Codes 錯誤碼
錯誤碼列表
列表仅孩,參見Error Codes section of the ES2Web documentation
Saving and Loading from Resources 從Resources保存和加載
Resources 允許包含和加載問價在運行時,包括ES2保存的文件
Saving to Resources 保存到Resources
ES智能保存到編輯器環(huán)境下的的Resources文件夾中,因為Build Unity應(yīng)用程序時候Resources文件夾不存在
如果你想將文件保存到Resources中惋嚎,以便稍后加載杠氢,則任何文件都必須以.bytes為后綴
因為ES2.Save接受一個絕對路徑,我們可以使用Application.dataPath來獲取我們Assets文件夾的絕對路徑,然后通過在path參數(shù)的后面追加Resources文件夾路徑
或者另伍,您可以將數(shù)據(jù)保存到您選擇的文件夾鼻百,然后將其拖到“Resources”文件夾中绞旅。
另外請注意,如果您希望在創(chuàng)建文件后立即在Unity中顯示文件温艇,則需要調(diào)用AssetDatabase.Refresh()因悲,或者從Unity中刷新資源。
ES2.Save(123, Application.dataPath+"/Resources/myFile.bytes?tag=myInt");
AssetDatabase.Refresh();
從Resources加載
要想從Resouces下加載資源勺爱,你必須設(shè)置你的 Save Location 存儲路徑為Resources晃琳。你可以使用Parameters參數(shù)的方式指定,或者使用 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的材質(zhì)中奈泪,可以使用以下代碼:
renderer.material.mainTexture = ES2.LoadImage("C:/Users/User/myImage.jpg");
Saving a Texture2D as a PNG
要將Texture2D保存為PNG适贸,請使用ES2.SaveImage方法。
例如涝桅,要保存分配給GameObject的材質(zhì)的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文件寻定,也無法在移動設(shè)備上加載Ogg文件。
將一個Ogg音頻文件加載到一個AudioSource然后播放它精耐,你可以使用下面的代碼:
audio.clip = ES2.LoadAudio("C:/User/Users/myAudio.ogg");
audio.Play();
Faster Saving and Loading using ES2Writer and ES2Reader 通過 ES2Writer 和 ES2Reader 更加快速的存儲與讀取
如果您在保存和加載時需要額外的性能狼速,或者一般情況下需要額外的靈活性,那么我們建議您使用ES2Writer和ES2Reader卦停。這比創(chuàng)建多個ES2.Save和ES2.Load調(diào)用要快向胡,因為它使文件在調(diào)用之間保持打開狀態(tài)
Using ES2Writer and ES2Reader with Tags 通過Tags 使用 ES2Writer 和 ES2Reader
與ES2.Save和ES2.Load類似,ES2Writer和ES2Reader可以與標(biāo)簽一起使用惊完。
在開始之前僵芹,還應(yīng)該注意,不應(yīng)該為同一個文件打開多個ES2Reader或ES2Writers小槐,否則會導(dǎo)致意外的行為拇派。
Saving Tags using ES2Writer 使用 ES2Writer 保存Tags
為了將數(shù)據(jù)保存到文件荷辕,您使用ES2Writer.Create創(chuàng)建一個ES2Writer對象,然后調(diào)用它的Write()方法將數(shù)據(jù)保存到文件中件豌。寫完文件后疮方,必須調(diào)用寫入器的Save方法,將數(shù)據(jù)存儲到文件中茧彤。
除非您使用ES2Writer作為Using語句的一部分骡显,否則必須在完成后調(diào)用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
要從文件加載數(shù)據(jù)曾掂,您需要使用ES2Reader.Create創(chuàng)建一個ES2Reader惫谤,然后調(diào)用它的Read()方法從文件加載數(shù)據(jù)。
您也可以使用Self-assigning Read讀取方法將數(shù)據(jù)直接加載到組件中珠洗。
除非您使用ES2Reader作為Using語句的一部分溜歪,否則必須在完成后調(diào)用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 按順序進行讀寫
保存和加載數(shù)據(jù)的最快方法是按照與保存數(shù)據(jù)相同的順序加載數(shù)據(jù)险污,而不使用標(biāo)簽痹愚。除了我們在保存和加載時沒有指定標(biāo)簽之外,這和前面的例子完全一樣蛔糯。
按照保存的順序加載數(shù)據(jù)非常重要拯腮,否則在運行時會收到錯誤。
另外請注意蚁飒,當(dāng)按順序保存時动壤,我們使用Save(false)而不是Save()來告訴ES我們沒有使用標(biāo)簽。
Saving to a File Sequentially 按順序保存數(shù)據(jù)到文件
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);
}
按順序從文件中加載數(shù)據(jù)
要從文件加載數(shù)據(jù)淮逻,需要使用ES2Reader.Create(path)創(chuàng)建一個ES2Reader琼懊,然后調(diào)用它的Read()方法從文件加載數(shù)據(jù)。
按照保存的順序加載數(shù)據(jù)非常重要爬早。
您也可以使用Self-assigning Read讀取方法將數(shù)據(jù)直接加載到組件中哼丈。
除非您使用ES2Reader作為Using語句的一部分,否則必須在完成后調(diào)用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 自動添加對類型的支持
您可以嘗試通過轉(zhuǎn)到Assets菜單并選擇Easy Save 2>Manage Types 來自動添加對類型的支持醉旦。然后在類型列表中找到要添加支持的類型,選擇要保存的類型的屬性桨啃,然后按Add Type车胡。
Easy Save可以添加對提供無參數(shù)構(gòu)造函數(shù)的類型的支持,并且可以支持以下屬性:
- Public
- Non-static
- Allows reading and writing
- Is currently supported by Esay Save
對于其他類型照瘾,你可能需要手動去添加
Manually adding support for a Type 手動添加支持的類型
如果支持不能自動添加類型匈棘,您可能能夠手動添加對它的支持。
最簡單的方法是創(chuàng)建一個ES2Type模板析命,方法是轉(zhuǎn)到Assets菜單并選擇Easy Save 2> Manage Types主卫,在類型列表中找到您的類型逃默,然后按Add Type。完成后队秩,按編輯類型在默認(rèn)編輯器中打開類型模板笑旺,以便編輯它。
然后馍资,您需要更改寫入和讀取方法以包含ES2Writer和ES2Reader調(diào)用
Adding to the Write method 增加write寫入方法
Write方法需要將要從數(shù)據(jù)變量中保存的數(shù)據(jù)寫入ES2Writer筒主。你可以通過使用writer.Write()調(diào)用。
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讀取數(shù)據(jù)的順序來reader.Read<T>()調(diào)用鸟蟹,然后使用該數(shù)據(jù)構(gòu)造加載的對象并將其返回乌妙。
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以二進制格式存儲數(shù)據(jù),因此無法使用普通的文件編輯器對其進行編輯建钥。
但是藤韵,您可以使用Easy Save的文件編輯器編輯它們。
打開文件編輯器
在Editor編輯器環(huán)境下熊经,轉(zhuǎn)到Assets菜單并選擇Easy Save 2>File Editor
要打開文件泽艘,只需單擊Open File按鈕并選擇您的文件。
創(chuàng)建一個新文件镐依,只用很簡單的點擊New File按鈕
Using the File Editor 使用文件編輯器
文件編輯器允許您創(chuàng)建文件匹涮,刪除文件,創(chuàng)建標(biāo)簽槐壳,刪除標(biāo)簽和修改標(biāo)簽的數(shù)據(jù)然低。
窗口左側(cè)的列表顯示文件中的所有標(biāo)簽。選擇一個查看標(biāo)簽的數(shù)據(jù)或修改它务唐。
或者雳攘,在添加新標(biāo)簽字段中輸入標(biāo)簽名稱和類型,并將新標(biāo)簽添加到文件中枫笛。
Limitations一些局限
- 它只能查看使用Easy Save標(biāo)簽保存的文件吨灭,而不是按順序?qū)懭氲臄?shù)據(jù)
- 只能查看和修改“被支持的類型”列表中的類型。
[Exporting to Spreadsheet and Excel 導(dǎo)出電子表格和Excel]
使用ES2 Spreadsheet刑巧,Easy Save可以創(chuàng)建電子表格并以Excel格式沃于,OSX Numbers和OpenOffice等常用電子表格軟件支持的CSV格式進行存儲。
Using ES2Spreadsheet 使用 ES2Spreadsheet
要創(chuàng)建電子表格海诲,請執(zhí)行以下操作:
1.創(chuàng)建一個ES2Spreadsheet對象。
2.使用SetCell設(shè)置單元格的值檩互。
- 請注意特幔,列和行號從0開始。
- 如果值不是字符串闸昨,它將使用值的ToString()將其轉(zhuǎn)成字符串表示形式蚯斯。
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 追加行到點擊表格中
如果要將數(shù)據(jù)附加到現(xiàn)有電子表格,請將電子表格的附加變量設(shè)置為true拍嵌。電子表格中的任何行將被添加到我們保存的行的末尾遭赂。
Limitations 一些局限
目前ES2Spreadsheet無法執(zhí)行以下操作,但可能會在將來執(zhí)行這些操作:
- 保存公式横辆。
- 存儲格式或樣式信息撇他。
- 保存多個工作表。
[Auto Save: Code-free Saving and Loading 自動保存,無須代碼進行存儲和加載]
重要:自動保存目前處于測試階段狈蚤,因此某些功能(如保存集合困肩,引用和空引用)被禁用。如果在產(chǎn)品中使用此測試版脆侮,請確保在發(fā)布之前對其進行徹底測試锌畸!在測試版中,我們不提供任何保障
“自動保存”是Unity 5編輯器的可視化腳本編輯工具靖避,可讓您在不進行任何編程的情況下保存和加載數(shù)據(jù)潭枣。
它可以用于保存組件,變量幻捏,甚至引用預(yù)制
Auto Saving Scene Objects 自動保存場景中的物體
開啟自動保存場景
1.前往Window > Easy Save 2 > Auto Save >Scene
2.按下"click to enable Auto Save for this scene" 按鈕
這將顯示可視化腳本工具盆犁,它將您的場景層次結(jié)構(gòu)顯示在列表中。單擊一個對象或變量的名稱粘咖,它會顯示它的實例變量蚣抗。
旁邊的每一個都是一個"保存圖標(biāo)",它允許您告訴自動保存以保存并加載它瓮下。點擊圖標(biāo)翰铡,它將變成高亮顯示,表示將自動保存讽坏。
Auto Saving Prefabs 自動保存預(yù)制
自動保存預(yù)制件锭魔,請在項目層次結(jié)構(gòu)中右鍵單擊它們,然后選擇簡易保存2>啟用自動保存預(yù)制件
然后路呜,您可以使用Prefabs(預(yù)制)選項卡下的Auto Save(自動保存)窗口訪問這些預(yù)制件及其子項迷捧。
Auto Save’s Settings 自動保存設(shè)置
Auto Save 窗口中的“設(shè)置”選項卡允許您選擇各種選項。以下是主要選項的簡要說明:
When to Load / When to Save 何時加載/何時保存
允許你選擇何時保存和加載胀葱,這對應(yīng)于Unity’s Event Functions
- 我們建議在所有平臺上都在Start方法中去加載
- 在移動平臺上在On Application Pause的時候去存儲
- 在所有非移動平臺上在On Application Quit的時候去存儲漠秋。
Filename/Path 文件名/路徑
這是一個文件的相對或絕對路徑,將被創(chuàng)建來存儲我們的自動保存數(shù)據(jù)抵屿。
Tag 標(biāo)簽
一個標(biāo)簽允許我們在一個可能包含許多不同的自動保存數(shù)據(jù)組的文件中唯一標(biāo)識這個自動保存數(shù)據(jù)庆锦。
例如,如果您打算將兩個不同場景中的不同數(shù)據(jù)自動保存到同一文件轧葛,則應(yīng)為每個場景使用不同的標(biāo)簽搂抒⊥Р螅或者,您可以為每個場景設(shè)置不同的文件名求晶。
Manually triggering Auto Save 手動觸發(fā)自動保存
有時您可能想要使用按鈕觸發(fā)自動保存焰雕,或者在您自己的事件中。
只需找到附加到ES2自動保存管理器對象的ES2自動保存管理器腳本芳杏,并調(diào)用它的Save()和Load()方法矩屁。
在代碼中獲取ES2自動保存管理器最簡單的方法如下
ES2AutoSaveManager mgr = GameObject.Find("ES2 Auto Save Manager").GetComponent<ES2AutoSaveManager>();
執(zhí)行此操作時,可能還需要將設(shè)置中的“Save”和“Load”事件設(shè)置為“None”蚜锨,以便只有在手動觸發(fā)游戲時才會自動保存游戲档插。
Known Beta Issues 了解測試版存在的問題
有時在退出Unity 5.3.3f1版本時,Auto Save/Prefabs中的選擇不會被保存亚再。
Unity的錯誤郭膛。請使用5.3.2f1或更低版本,或等待Unity的修復(fù)氛悬。