close

關於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存檔與加密

參考文章;Unity3D游戏开发之游戏读/存档功能在Unity3D中的实现

其他Json套件序列反序列

RijndaelManaged 類別

ICryptoTransform 介面

arrow
arrow

    Kouhei 發表在 痞客邦 留言(1) 人氣()