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



  • 相关阅读:
    matlab播放音乐
    virtualbox安装增强功能时【未能加载虚拟光盘】
    VirtualBox piix4_smbus Error
    VirtualBox虚拟机运行Ubuntu如何不卡
    微信支付注意事项
    ListView实现RadioButton的单选效果
    他山之石____Java 线程池的原理与实现
    线程池的使用____银行业务调度系统
    基础加强____【动态代理 & AOP】【实现类Spring的AOP框架】
    基础加强____【Java类加载器 & "委托机制"】
  • 原文地址:https://www.cnblogs.com/lexiaoyao-jun/p/5208251.html
Copyright © 2020-2023  润新知