大家好我是沒路~~ 今天來分享個Unity存檔的方式:
Unity本身有提供PlayerPrefs類別提供存檔 , 可支援的類型有:
PlayerPrefs.SetFloat()--浮點數
PlayerPrefs.SetInt()--整數
PlayerPrefs.SetString()--字串
每筆資料需要帶一個Key , 假如今天要存一個名為"血量"的變數,可能可以打成這樣:
存檔----
int hp = 987;
PlayerPrefs.SetInt( "Hp",hp );
讀檔----
int hp = PlayerPrefs.GetInt( "Hp" );
每一個變數都需帶一個key , 如果今天要做個多存檔的遊戲會變得頗麻煩 , 可能要對Key去下副標題,像這樣 "save1_hp" , save2_hp . . . 想刪除save1的資料還得撈出所有副標為save1的變數來做刪除. 真的處理起來還挺麻煩的!
多存檔的遊戲機制(偷一下仙劍的圖來用)
PlayerPrefs的詳細說明可以估狗[ unity 存檔]有蠻多資訊的.
這邊介紹另外一種<使用序列化的方式來進行存檔>
"序列化"簡單的說是將存在記憶體階段時的變數寫進系統檔案的方式 , 通常可以寫成xml字串或是binary二進制的格式---有興趣的可以逛逛:
https://msdn.microsoft.com/zh-tw/library/4abbf6k0(v=vs.120).aspx※現在正文開始
簡單說一下原理 , 將打算要存檔的變數都寫進一個Class裡 , 要存檔時我們會將這個Class打成個一個序列化後的字串,存進 >>PlayerPrefs.SetString() 裡
讀檔時再利用 >> PlayerPrefs.GetString() 來反序列化 , 將其還原成類別, 如此一來只需要一個
key 就可以處理所有的存檔了~~
實作:
定義一個Class來存檔 , 以下叫PlayerSaveData.cs
記得引入
using System.Runtime.InteropServices;
用途是:
InteropServices參考
序列化與反序列化:
讀檔:
PlayerSaveData saveData = new PlayerSaveData();
saveData = SaveLoadData.LoadData();
存檔
SaveLoadData.SaveData( saveData );
能存的類型非常多 ,除了一些基本資料形態、陣列.. 連類別都存的進去 , 但一些比較複雜的結構
如Dictionary List 就建議不要存 , 將他寫成陣列 , 讀檔時再還原 , 比較確保資料正確性.
大概做法就醬~
※老師說不要一直複製貼上,要自己打一遍.