Unity3d本地存储

原文地址:http://blog.csdn.net/dingkun520wy/article/details/49386507

(一)简单数据存储PlayerPrefs

这种存储方法比较简单直接上代码

//简单数据存储
    public void SimpleLocalStorage()
    {
        //存储信息
        PlayerPrefs.SetString("TestString", "存储");
        PlayerPrefs.SetInt("TestInt", 8);
        PlayerPrefs.SetFloat("TestFloat", 8.8F);
        //获取信息
        PlayerPrefs.GetString("TestString");
        PlayerPrefs.GetInt("TestInt");
        PlayerPrefs.GetFloat("TestFloat");

        //判断是否有信息
        if (PlayerPrefs.HasKey("TestString"))
        {
            //删除信息
            PlayerPrefs.DeleteKey("TestString");
            PlayerPrefs.DeleteKey("TestInt");
            PlayerPrefs.DeleteKey("TestFloat");
        }
        //删除所有
        PlayerPrefs.DeleteAll();
    }

 

 

(二)Xml数据存储

首先是定义数据对象和Xml格式字符串相互转换的函数

 

/// 数据对象转换xml字符串
    public string SerializeObject(object pObject, System.Type ty)
    {
        string XmlizedString = null;
        MemoryStream memoryStream = new MemoryStream();
        XmlSerializer xs = new XmlSerializer(ty);
        XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8);
        xs.Serialize(xmlTextWriter, pObject);
        memoryStream = (MemoryStream)xmlTextWriter.BaseStream;
        XmlizedString = UTF8ByteArrayToString(memoryStream.ToArray());
        return XmlizedString;
    }

    /// xml字符串转换数据对象
    public object DeserializeObject(string pXmlizedString, System.Type ty)
    {
        XmlSerializer xs = new XmlSerializer(ty);
        MemoryStream memoryStream = new MemoryStream(StringToUTF8ByteArray(pXmlizedString));
        XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8);
        return xs.Deserialize(memoryStream);
    }
//UTF8字节数组转字符串
    public string UTF8ByteArrayToString(byte[] characters)
    {
        UTF8Encoding encoding = new UTF8Encoding();
        string constructedString = encoding.GetString(characters);
        return (constructedString);
    }

    //字符串转UTF8字节数组
    public byte[] StringToUTF8ByteArray(String pXmlString)
    {
        UTF8Encoding encoding = new UTF8Encoding();
        byte[] byteArray = encoding.GetBytes(pXmlString);
        return byteArray;
    }


然后定义读取和存储文本文件的函数,这里用到了Base64的加密方法

 

 

/// 创建文本文件
    public void CreateTextFile(string fileName, string strFileData, bool isEncryption)
    {
        StreamWriter writer;                               //写文件流
        string strWriteFileData;
        if (isEncryption)
        {
            strWriteFileData = Encrypt(strFileData);  //是否加密处理
        }
        else
        {
            strWriteFileData = strFileData;             //写入的文件数据
        }
        
        writer = File.CreateText(fileName);
        writer.Write(strWriteFileData);
        writer.Close();                                    //关闭文件流
    }


    /// 读取文本文件
    public string LoadTextFile(string fileName, bool isEncryption)
    {
        StreamReader sReader;                              //读文件流
        string dataString;                                 //读出的数据字符串

        sReader = File.OpenText(fileName);
        dataString = sReader.ReadToEnd();
        sReader.Close();                                   //关闭读文件流

        if (isEncryption)
        {
            return Decrypt(dataString);                      //是否解密处理
        }
        else
        {
            return dataString;
        }
     
    }
/// 加密方法
    /// 描述: 加密和解密采用相同的key,具体值自己填,但是必须为32位
    public string Encrypt(string toE)
    {
        byte[] keyArray = UTF8Encoding.UTF8.GetBytes("12348578902223367877723456789012");
        RijndaelManaged rDel = new RijndaelManaged();
        rDel.Key = keyArray;
        rDel.Mode = CipherMode.ECB;
        rDel.Padding = PaddingMode.PKCS7;
        ICryptoTransform cTransform = rDel.CreateEncryptor();
        byte[] toEncryptArray = UTF8Encoding.UTF8.GetBytes(toE);
        byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);

        return Convert.ToBase64String(resultArray, 0, resultArray.Length);
    }

    /// 解密方法
    /// 描述: 加密和解密采用相同的key,具体值自己填,但是必须为32位
    public string Decrypt(string toD)
    {
        byte[] keyArray = UTF8Encoding.UTF8.GetBytes("12348578902223367877723456789012");
        RijndaelManaged rDel = new RijndaelManaged();
        rDel.Key = keyArray;
        rDel.Mode = CipherMode.ECB;
        rDel.Padding = PaddingMode.PKCS7;
        ICryptoTransform cTransform = rDel.CreateDecryptor();
        byte[] toEncryptArray = Convert.FromBase64String(toD);
        byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);

        return UTF8Encoding.UTF8.GetString(resultArray);
    }


定义数据对象

 

 

public class UserData
{
    public string userName;         //用户名
    public int onlyId;				//用户唯一id

    public UserData()
    {

    }
}


 


函数的用法


 

//xml数据存储和读取
    public void XmlLocalStorage()
    {
        string _fileName = Application.persistentDataPath + "/UnityUserData";

        UserData user = new UserData();
        user.userName = "乐逍遥";
        user.onlyId = 1;
        //存储数据
        string s = SerializeObject(user, typeof(UserData));
        //创建XML文件且写入数据
        CreateTextFile(_fileName, s,false);

        //读取数据
        try
        {
            string strTemp = LoadTextFile(_fileName,false);
            //反序列化对象
            UserData userD = DeserializeObject(strTemp, typeof(UserData)) as UserData;

        }
        catch
        {
            Debug.Log("系统读取XML出现错误,请检查");
        }
    }


 


 

转载于:https://www.cnblogs.com/lexiaoyao-jun/p/5208251.html

你可能感兴趣的:(游戏)