關於Unity存檔就可以大致分為三種:
1.PlayerPrefs:Unity引擎提供的類別,用key和value將資訊存在檔案系統中,適合用於儲存簡單資料
2.自行儲存檔案:用C#的System.IO.File的類別,自行開啟檔案儲存資料,適合儲存複雜資料
3.Xml , JSON格式:使用C#的System.Xml(Xml格式) ,JSON可以用第三方Json.net的Newtonsoft.Json這個類庫或LitJson等套件(Unity5.3之後,Unity新增了內建的JsonUtility功能進行 Json 檔案 的讀存取),適合儲存複雜資料
這裡就用Unity5.3之後內建的JsonUtility為主來實現JSON加密存檔
Json加密存檔程序:
1.用JsonUtility.ToJson來對需保存的數據序列化為字串
2.用RijndaeManaged類和ICrytoTransform類對剛得到的序列化字串進行加密,再獲得加密字串
3.根據平台類型,決定文件保存的基底路徑
4.使用StreamWriter類將字符串保存到文件中
Json解密讀檔程序:
1.根據檔案路徑,使用StreamReader類將加密字串取出
2.用RijndaeManaged類和ICrytoTransform類對剛得到的加密字串進行解密,再獲得解密後內容
3.用JsonUtility.FromJson來對解密後的內容作反序列化,得到最後數據
一、序列化與反序列化
這裡用Unity5.3之後內建的JsonUtility實現,先建一個類別GameDataManager,然後加入下面兩個方法
寫存檔和讀檔的方法,在使用StreamWriter和StreamReader前要先引用System.IO類
str
然後先寫一個class做為數據資料,然後做無加密存取
在Start裡面存取資料
在路徑下新增了一個文件,就是JSON的資料格式的存檔數據
二、Rijndael加密解密
首先要先引用System.Security.Cryptography,RijndaeManaged類和ICrytoTransform類都屬於其中,然後還要引用System.Text,針對UTF8Encoding的部分
有兩個參數pString是待加密數據,pKey為加密密鑰( 此算法支持密鑰長度为 (byte[16])128、(byte[24])192 或 (byte[32])256 位)
然後修改一下存讀檔的方法,加入加密和解密方法,密鑰要相同
加密後存檔文件
三、完整程式碼
補充一下:CreateFile是用來建立文件、CreateDirectory是用來建立資料夾的,DataPath是用來根據執行裝置不同來決定存檔目錄
參考:unity各平台檔案路徑
※測試Code
其實Xml的處理方式也大同小異,可以參考這篇:XML存檔與加密