Unity3d本地存储

32 篇文章 0 订阅
31 篇文章 0 订阅

(一)简单数据存储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()  
    {  
  
    }  
}

函数的用法

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出现错误,请检查");  
        }  
    }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值