Unity3d本地存储

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

(一)简单数据存储PlayerPrefs

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

[csharp]  view plain  copy
  1. //简单数据存储  
  2.     public void SimpleLocalStorage()  
  3.     {  
  4.         //存储信息  
  5.         PlayerPrefs.SetString("TestString""存储");  
  6.         PlayerPrefs.SetInt("TestInt", 8);  
  7.         PlayerPrefs.SetFloat("TestFloat", 8.8F);  
  8.         //获取信息  
  9.         PlayerPrefs.GetString("TestString");  
  10.         PlayerPrefs.GetInt("TestInt");  
  11.         PlayerPrefs.GetFloat("TestFloat");  
  12.   
  13.         //判断是否有信息  
  14.         if (PlayerPrefs.HasKey("TestString"))  
  15.         {  
  16.             //删除信息  
  17.             PlayerPrefs.DeleteKey("TestString");  
  18.             PlayerPrefs.DeleteKey("TestInt");  
  19.             PlayerPrefs.DeleteKey("TestFloat");  
  20.         }  
  21.         //删除所有  
  22.         PlayerPrefs.DeleteAll();  
  23.     }  

(二)Xml数据存储

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

[csharp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. /// 数据对象转换xml字符串  
  2.     public string SerializeObject(object pObject, System.Type ty)  
  3.     {  
  4.         string XmlizedString = null;  
  5.         MemoryStream memoryStream = new MemoryStream();  
  6.         XmlSerializer xs = new XmlSerializer(ty);  
  7.         XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8);  
  8.         xs.Serialize(xmlTextWriter, pObject);  
  9.         memoryStream = (MemoryStream)xmlTextWriter.BaseStream;  
  10.         XmlizedString = UTF8ByteArrayToString(memoryStream.ToArray());  
  11.         return XmlizedString;  
  12.     }  
  13.   
  14.     /// xml字符串转换数据对象  
  15.     public object DeserializeObject(string pXmlizedString, System.Type ty)  
  16.     {  
  17.         XmlSerializer xs = new XmlSerializer(ty);  
  18.         MemoryStream memoryStream = new MemoryStream(StringToUTF8ByteArray(pXmlizedString));  
  19.         XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8);  
  20.         return xs.Deserialize(memoryStream);  
  21.     }  
  22. //UTF8字节数组转字符串  
  23.     public string UTF8ByteArrayToString(byte[] characters)  
  24.     {  
  25.         UTF8Encoding encoding = new UTF8Encoding();  
  26.         string constructedString = encoding.GetString(characters);  
  27.         return (constructedString);  
  28.     }  
  29.   
  30.     //字符串转UTF8字节数组  
  31.     public byte[] StringToUTF8ByteArray(String pXmlString)  
  32.     {  
  33.         UTF8Encoding encoding = new UTF8Encoding();  
  34.         byte[] byteArray = encoding.GetBytes(pXmlString);  
  35.         return byteArray;  
  36.     }  

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

[csharp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. /// 创建文本文件  
  2.     public void CreateTextFile(string fileName, string strFileData, bool isEncryption)  
  3.     {  
  4.         StreamWriter writer;                               //写文件流  
  5.         string strWriteFileData;  
  6.         if (isEncryption)  
  7.         {  
  8.             strWriteFileData = Encrypt(strFileData);  //是否加密处理  
  9.         }  
  10.         else  
  11.         {  
  12.             strWriteFileData = strFileData;             //写入的文件数据  
  13.         }  
  14.           
  15.         writer = File.CreateText(fileName);  
  16.         writer.Write(strWriteFileData);  
  17.         writer.Close();                                    //关闭文件流  
  18.     }  
  19.   
  20.   
  21.     /// 读取文本文件  
  22.     public string LoadTextFile(string fileName, bool isEncryption)  
  23.     {  
  24.         StreamReader sReader;                              //读文件流  
  25.         string dataString;                                 //读出的数据字符串  
  26.   
  27.         sReader = File.OpenText(fileName);  
  28.         dataString = sReader.ReadToEnd();  
  29.         sReader.Close();                                   //关闭读文件流  
  30.   
  31.         if (isEncryption)  
  32.         {  
  33.             return Decrypt(dataString);                      //是否解密处理  
  34.         }  
  35.         else  
  36.         {  
  37.             return dataString;  
  38.         }  
  39.        
  40.     }  
  41. /// 加密方法  
  42.     /// 描述: 加密和解密采用相同的key,具体值自己填,但是必须为32位  
  43.     public string Encrypt(string toE)  
  44.     {  
  45.         byte[] keyArray = UTF8Encoding.UTF8.GetBytes("12348578902223367877723456789012");  
  46.         RijndaelManaged rDel = new RijndaelManaged();  
  47.         rDel.Key = keyArray;  
  48.         rDel.Mode = CipherMode.ECB;  
  49.         rDel.Padding = PaddingMode.PKCS7;  
  50.         ICryptoTransform cTransform = rDel.CreateEncryptor();  
  51.         byte[] toEncryptArray = UTF8Encoding.UTF8.GetBytes(toE);  
  52.         byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);  
  53.   
  54.         return Convert.ToBase64String(resultArray, 0, resultArray.Length);  
  55.     }  
  56.   
  57.     /// 解密方法  
  58.     /// 描述: 加密和解密采用相同的key,具体值自己填,但是必须为32位  
  59.     public string Decrypt(string toD)  
  60.     {  
  61.         byte[] keyArray = UTF8Encoding.UTF8.GetBytes("12348578902223367877723456789012");  
  62.         RijndaelManaged rDel = new RijndaelManaged();  
  63.         rDel.Key = keyArray;  
  64.         rDel.Mode = CipherMode.ECB;  
  65.         rDel.Padding = PaddingMode.PKCS7;  
  66.         ICryptoTransform cTransform = rDel.CreateDecryptor();  
  67.         byte[] toEncryptArray = Convert.FromBase64String(toD);  
  68.         byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);  
  69.   
  70.         return UTF8Encoding.UTF8.GetString(resultArray);  
  71.     }  

定义数据对象

[csharp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. public class UserData  
  2. {  
  3.     public string userName;         //用户名  
  4.     public int onlyId;              //用户唯一id  
  5.   
  6.     public UserData()  
  7.     {  
  8.   
  9.     }  
  10. }  



函数的用法


[csharp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. //xml数据存储和读取  
  2.     public void XmlLocalStorage()  
  3.     {  
  4.         string _fileName = Application.persistentDataPath + "/UnityUserData";  
  5.   
  6.         UserData user = new UserData();  
  7.         user.userName = "乐逍遥";  
  8.         user.onlyId = 1;  
  9.         //存储数据  
  10.         string s = SerializeObject(user, typeof(UserData));  
  11.         //创建XML文件且写入数据  
  12.         CreateTextFile(_fileName, s,false);  
  13.   
  14.         //读取数据  
  15.         try  
  16.         {  
  17.             string strTemp = LoadTextFile(_fileName,false);  
  18.             //反序列化对象  
  19.             UserData userD = DeserializeObject(strTemp, typeof(UserData)) as UserData;  
  20.   
  21.         }  
  22.         catch  
  23.         {  
  24.             Debug.Log("系统读取XML出现错误,请检查");  
  25.         }  
  26.     }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值